STM32F407 UART 接收数据问题

2019-07-14 21:05发布

Hi,我最近买了STM32F407 的板子,尝试UART 功能的时候发现输出数据没有问题,但是输入数据不正确,读取的时候读到的是同一个数据(ASCII 是127),并且我用SecureCRT根本没有输入按键,调用received函数的时候也会一直返回数据,没有返回错误码。
我用的uart 库应该是keil 官方的,uvision5 自带的。
我确定硬件是没有问题的,因为我是用这个UART来下载程序的。
请教一下各位,可能是什么问题 ?  谢谢!

这是我的代码:
  1. USART_HandleTypeDef uart;

  2. void uart_init(uint32_t baud_rate)
  3. {
  4.           uart.Init.BaudRate = baud_rate;
  5.           uart.Init.WordLength = USART_WORDLENGTH_8B;
  6.           uart.Init.StopBits = USART_STOPBITS_1;
  7.           uart.Init.Parity = USART_PARITY_NONE;
  8.           uart.Init.Mode = USART_MODE_TX_RX;
  9.         uart.Instance = USART1;
  10.        
  11.         HAL_USART_Init(&uart);
  12. }

  13. /* override the weak version in stm32f4xx_hal_usart.c */
  14. void HAL_USART_MspInit(USART_HandleTypeDef *husart)
  15. {
  16.         GPIO_InitTypeDef GPIO_InitStruct;
  17.        
  18.         __GPIOA_CLK_ENABLE();
  19.         __HAL_RCC_USART1_CLK_ENABLE();
  20.        
  21.         GPIO_InitStruct.Pin   = GPIO_PIN_9;
  22.         GPIO_InitStruct.Mode  = GPIO_MODE_AF_PP;
  23.         GPIO_InitStruct.Pull  = GPIO_PULLUP;
  24.         GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  25.         GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
  26.         HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  27.         GPIO_InitStruct.Pin   = GPIO_PIN_10;
  28.         GPIO_InitStruct.Mode  = GPIO_MODE_AF_PP;
  29.         GPIO_InitStruct.Pull  = GPIO_PULLUP;
  30.         GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  31.         GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
  32.         HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  33. }

  34. int USART_GetChar(void)
  35. {
  36. #if 1
  37.         uint8_t rx_data;
  38.         int ret;

  39.         while (1)
  40.         {
  41.                 ret = HAL_USART_Receive(&uart, &rx_data, 1, 1000);
  42.                 if (ret == HAL_OK)
  43.                 {
  44.                         break;
  45.                 }
  46.                 else if (ret == HAL_ERROR)
  47.                 {
  48.                         return -1;
  49.                 }
  50.                
  51.                
  52.         }
  53.         return rx_data;
  54. #else

  55.         while ( !(uart.Instance->SR & USART_FLAG_RXNE)) ;
  56.         //uart.Instance->SR &= ~USART_FLAG_RXNE;
  57.        
  58.         led3_on();
  59.         osDelay(100);
  60.         led3_off();
  61.         osDelay(100);
  62.         led3_on();
  63.         osDelay(100);
  64.         led3_off();
  65.        
  66.         return (uart.Instance->DR & (uint8_t)0x00FF);


  67. #endif
  68. }
复制代码

0条回答

一周热门 更多>