STM32F401 UART1

2019-07-21 04:20发布

各位好!        我在调试401 usart1时候,刚开始用PA9 PA1,怎么搞都没反应,就想串口没配置起来一样 后来,尝试复用的 PB6 PB7上,结果可以了,纳闷呀!       我怀疑,是不是IO坏了,我单独控制PA9 PA10 拉高拉低,一点问题没有       麻烦大家帮忙抽空看看,谢谢!       附上代码:
#if 1 //PB6 PB7
#define USART1_ALT_GPIO_CLK  RCC_AHB1Periph_GPIOB
#define USART1_ALT_GPIO  GPIOB
#define USART1_TX_PIN  GPIO_Pin_6
#define USART1_RX_PIN  GPIO_Pin_7
#define TX_ALT_PIN  GPIO_PinSource6
#define RX_ALT_PIN  GPIO_PinSource7
#else  //PA9 PA10
#define USART1_ALT_GPIO_CLK  RCC_AHB1Periph_GPIOA
#define USART1_ALT_GPIO  GPIOA
#define USART1_TX_PIN  GPIO_Pin_9
#define USART1_RX_PIN  GPIO_Pin_10
#define TX_ALT_PIN  GPIO_PinSource9
#define RX_ALT_PIN  GPIO_PinSource10
#endif

#define TEST_PA9  Aout(9)
#define TEST_PA10 PAout(10)  

void Test_PA9PA10(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);


  TEST_PA9=0;
TEST_PA10=0;
TEST_PA9=1;
TEST_PA10=1;
TEST_PA9=0;
TEST_PA10=0;

}


//??????IO ?®??1 
//bound:?¨????
void uart_init(u32 bound)
{
   //GPIO?????è??
  GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;


RCC_AHB1PeriphClockCmd(USART1_ALT_GPIO_CLK,ENABLE); //????GPIOA?±??
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//????USART1?±??
 
//?®??1????????????????
GPIO_PinAFConfig(USART1_ALT_GPIO,TX_ALT_PIN,GPIO_AF_USART1); //GPIOA9??????USART1
GPIO_PinAFConfig(USART1_ALT_GPIO,RX_ALT_PIN,GPIO_AF_USART1); //GPIOA10??????USART1

//USART1????????
  GPIO_InitStructure.GPIO_Pin = USART1_TX_PIN | USART1_RX_PIN; //GPIOA9??GPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //????50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //???ì????????
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //????
GPIO_Init(USART1_ALT_GPIO,&GPIO_InitStructure); //??????PA9??PA10

   //USART1 ???????è??
USART_InitStructure.USART_BaudRate = bound;//?¨?????è??
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×??¤??8??????????
USART_InitStructure.USART_StopBits = USART_StopBits_1;//??????????
USART_InitStructure.USART_Parity = USART_Parity_No;//?????????é??
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//???????????÷????
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //??·?????
  USART_Init(USART1, &USART_InitStructure); //???????®??1

  USART_Cmd(USART1, ENABLE);  //?????®??1 

USART_ClearFlag(USART1, USART_FLAG_TC);

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//?????à??????

//Usart1 NVIC ????
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//?®??1?????¨??
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//??????????3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //×???????3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨??????
NVIC_Init(&NVIC_InitStructure); //?ù?????¨????????????VIC?????÷??

//Test_PA9PA10();
}


void USART1_SendChar(u8 ch)
{
while((USART1->SR&0X40)==0);//???··???,?±??·????ê±?   
USART1->DR = (u8) ch;      
}

void USART1_IRQHandler(void)                 //?®??1????·??????ò
{
u8 Res;

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //????????(????????????±?????0x0d 0x0a?á??)
{
Res =USART_ReceiveData(USART1);//(USART1->DR); //????????????????
USART1_SendChar(Res);
  } 


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。