完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
按照惯例使用cubemx创建工程。
之前使能串口中断 调用HAL_UART_Receive_IT(); 为了之后其他串口使用相同函数发送CMD void UART_PortConfig(uint8_t num, UART_HandleTypeDef *h_uart) { UART_Handle_Array[num-1] = h_uart; /* Enable the UART Parity Error Interrupt */ __HAL_UART_ENABLE_IT(h_uart, UART_IT_PE); /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ __HAL_UART_ENABLE_IT(h_uart, UART_IT_ERR); /* Enable the UART Data Register not empty Interrupt */ __HAL_UART_ENABLE_IT(h_uart, UART_IT_RXNE); } 确实串口打印没问题,接收数据和往常一样放在串口回调函数HAL_UART_RxCpltCallback,而清除中断标志位也放在了回调函数里面。 问题出现 发送数据后只能进入中断一次,然后也无法进入回调函数。 再次将清除中断标志位放入中断中,发送数据,正常进入中断,仍然没有进入回调函数。 回头将HAL_UART_Receive_IT这个函数中所有子程序放入,一点点删除,最后只剩两条 h_uart->RxXferCount = 1; h_uart->RxState = HAL_UART_STATE_BUSY_RX; 添加完正常进入中断回调函数。为什么这两句可以回调函数,我也没搞明白。 正确的函数(为了更简洁我会使用上面那个函数,不用回调函数了) void UART_PortConfig(uint8_t num, UART_HandleTypeDef *h_uart) { UART_Handle_Array[num-1] = h_uart; h_uart->RxXferCount = 1; h_uart->RxState = HAL_UART_STATE_BUSY_RX; /* Enable the UART Parity Error Interrupt */ __HAL_UART_ENABLE_IT(h_uart, UART_IT_PE); /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ __HAL_UART_ENABLE_IT(h_uart, UART_IT_ERR); /* Enable the UART Data Register not empty Interrupt */ __HAL_UART_ENABLE_IT(h_uart, UART_IT_RXNE); } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1767 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1069 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1935浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
727浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
567浏览 3评论
592浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
551浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 22:06 , Processed in 0.723290 second(s), Total 45, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号