高中生
最后登录1970-1-1
在线时间 小时
注册时间2020-7-16
|
1火花
本帖最后由 将心明月 于 2020-9-15 09:37 编辑
如题,用STM32CUBEMX进行串口实验,目的是程序下载成功后,复位可以用串口调试助手接收到“hello world!”
当发送“0xa1”,串口调试助手可以接收到"LED1 Open!“
当发送“0xa2”,串口调试助手可以接收到"LED1 Closed!“
实际是只能用串口调试助手发送一次,可以接收到返回值。后面再发送就接收不到返回的值了。求解,代码如下:
- uint8_t Tx_str1[] = "hello world!\r\n";
- uint8_t Tx_str2[] = "LED1 Open!\r\n";
- uint8_t Tx_str3[] = "LED1 Closed!\r\n";
- uint8_t Rx_dat = 0;
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- {
- if(huart->Instance == USART1)
- {
- if(Rx_dat == 0xa1)
- {
- HAL_UART_Transmit(&huart1,Tx_str2,sizeof(Tx_str2),10000);
- HAL_UART_Receive_IT(&huart1,&Rx_dat,1);
- }
- else if(Rx_dat == 0xa2)
- {
- HAL_UART_Transmit(&huart1,Tx_str3,sizeof(Tx_str3),10000);
- HAL_UART_Receive_IT(&huart1,&Rx_dat,1);
- }
- }
- }
- //在mian()函数中添加以下代码:
- HAL_UART_Transmit(&huart1,Tx_str1,sizeof(Tx_str1),10000); //向上位机发送“hello world!”
- HAL_UART_Receive_IT(&huart1,&Rx_dat,1); //启动串口1接收上位机1个字节
复制代码
|
最佳答案
查看完整内容
在 HAL_UART_Receive_IT()函数前面加上这两句试试
huart1.RxState = HAL_UART_STATE_READY;
__HAL_UART_FLUSH_DRREGISTER(&huart1);
|