完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
STM32 HAL 详述串口收发的所有方式
串口收发方式 串口收发的使用无外乎下面这些使用方式 串口发送 轮询发送 HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)轮询发送函数,根据TXE标志一字节一字节的将数据传输到移位寄存器,再根据TC标志判断发送完成。 中断发送 HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)中断发送函数,首先将要发送的数据及大小赋值给串口句柄的发送缓存,然后开启发送数据寄存器为空(TXE)中断,每传输完一个字节便会触发一次进入一次中断,在传输最后一个字节数据时关闭发送数据寄存器为空(TXE)中断,开启发送数据完成(TC)中断。发送完成后会执行发送完成的回调函数HAL_UART_TxCpltCallback(huart);
通过DMA方式发送数据,只能通过正常模式,且要等上次数据通过DMA传输完成后才能开启下次传输。(可以通过发送完成中断或DMA传输完成中断两种方式判断数据发送完成) 串口接收 轮询接收 一般情况下,并不知道什么时候会有数据到来,若一直再while循环中接收会过于占用单片机资源。正常情况下,串口接收会采用前台的处理方式,有数据到来就响应,也就是下面几种方式。 中断接收
中断中不断接收单个字符,在触发IDLE中断后说明接收到了一帧数据(一般情况下,这一帧数据便是一条完整的指令) DMA+IDLE接收 开启DMA接收后,会自动将串口数据搬运到内存区域,在触发IDLE中断后说明接收到了一帧数据(一般情况下,这一帧数据便是一条完整的指令) 正常DMA 触发IDLE中断后需要暂时关闭DMA接收(防止此时再有数据到来),需要在处理数据后再次开启DMA接收 循环DMA 开启DMA循环模式后,没有必要每次触发idle中断后重新开启DMA接收,否则边和正常模式一样了。DMA开启循环模式后本身就相当于一个ringbuffer,只需设定两个指向头尾的变量即可将本帧数据读出来,而且idle中断中不需要关闭DMA接收。 附注
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1752 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1611 浏览 1 评论
1052 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1666 浏览 2 评论
1926浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
711浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
560浏览 3评论
583浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
544浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 15:03 , Processed in 0.814151 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号