新手入门
- 积分
- 13
- 金钱
- 13
- 注册时间
- 2021-11-5
- 在线时间
- 5 小时
|
2金钱
串口1通讯实验,初始化PA9、PA10为复用模式,配置复用函数时用下面的写法能通过编译并且烧录,但是接收不到F4发回来的信息,
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10|GPIO_PinSource9,GPIO_AF_USART1);
如果换成下面的写法就会一切正常:
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
纯新手,想问一下第一种存在什么问题导致失败,谢谢!
全部代码:
#include "stm32f4xx.h"
void USART1_IRQHandler(void);
void My_USART1_Init(void);
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
My_USART1_Init();
while(1)
{
};
}
void My_USART1_Init(void)
{
GPIO_InitTypeDef PinStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
PinStructure.GPIO_Mode=GPIO_Mode_AF;
PinStructure.GPIO_OType=GPIO_OType_PP;
PinStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;
PinStructure.GPIO_PuPd=GPIO_PuPd_UP;
PinStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOA,&PinStructure);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
USART_InitStructure.USART_BaudRate=115200;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void USART1_IRQHandler(void)
{
u8 r;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
r =USART_ReceiveData(USART1);//(USART1->DR)
USART_SendData(USART1,r);
}
}
|
最佳答案
查看完整内容[请看2#楼]
GPIOX_AF寄存器是独立的
void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
{
uint32_t temp = 0x00;
uint32_t temp_2 = 0x00;
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
assert_param(IS_GPIO_AF(GPIO_AF));
temp = ((uint32_t)(GPIO_AF) AFR[GPIO_PinSource >> 0x03] &= ...
|