Hi,我最近买了
STM32F407 的板子,尝试UART 功能的时候发现输出数据没有问题,但是输入数据不正确,读取的时候读到的是同一个数据(ASCII 是127),并且我用SecureCRT根本没有输入按键,调用received函数的时候也会一直返回数据,没有返回错误码。
我用的uart 库应该是keil 官方的,uvision5 自带的。
我确定硬件是没有问题的,因为我是用这个UART来下载程序的。
请教一下各位,可能是什么问题 ? 谢谢!
这是我的代码:
- USART_HandleTypeDef uart;
- void uart_init(uint32_t baud_rate)
- {
- uart.Init.BaudRate = baud_rate;
- uart.Init.WordLength = USART_WORDLENGTH_8B;
- uart.Init.StopBits = USART_STOPBITS_1;
- uart.Init.Parity = USART_PARITY_NONE;
- uart.Init.Mode = USART_MODE_TX_RX;
- uart.Instance = USART1;
-
- HAL_USART_Init(&uart);
- }
- /* override the weak version in stm32f4xx_hal_usart.c */
- void HAL_USART_MspInit(USART_HandleTypeDef *husart)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
-
- __GPIOA_CLK_ENABLE();
- __HAL_RCC_USART1_CLK_ENABLE();
-
- GPIO_InitStruct.Pin = GPIO_PIN_9;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- GPIO_InitStruct.Pin = GPIO_PIN_10;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
- int USART_GetChar(void)
- {
- #if 1
- uint8_t rx_data;
- int ret;
- while (1)
- {
- ret = HAL_USART_Receive(&uart, &rx_data, 1, 1000);
- if (ret == HAL_OK)
- {
- break;
- }
- else if (ret == HAL_ERROR)
- {
- return -1;
- }
-
-
- }
- return rx_data;
- #else
- while ( !(uart.Instance->SR & USART_FLAG_RXNE)) ;
- //uart.Instance->SR &= ~USART_FLAG_RXNE;
-
- led3_on();
- osDelay(100);
- led3_off();
- osDelay(100);
- led3_on();
- osDelay(100);
- led3_off();
-
- return (uart.Instance->DR & (uint8_t)0x00FF);
- #endif
- }
复制代码
一周热门 更多>