完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32 硬件UART接收超时检测设置
应用场景 在uart应用中有时候需要进行双工通信,主机需要对从机的数据进行接收超时检测,例如modbus协议,主机在接收从机数据在3.5个字节时间后认为数据包接收完毕。那在这种情况下,一般的做法是设置一个定时器,在每接收到一个字节时清零定时器重新计数,直到定时器超过3.5个字节时间后触发中断即默认数据包接收完毕。 以上的定时器设置的超时判断是需要软件介入的。这里STM32的有些串口是提供硬件超时检测功能。这样就省去如上的步骤。 设置步骤 本实验是利用CubeMx生成的工程进行验证的。 首先,利用cubemx配置usart1(注意:并不是每个STM32芯片的串口都具有硬件超时检测功能的)。值得注意的是在cubeMX中并没有设置硬件超时的选项,所以这里只是生产可用的usart工程。 生成工程后,我们去数据手册,其中有这样的描述。 所以本文添加一个使能超时检测的函数,如下所示 void Uart_RxOvertimeEnable(void) { /*使能接收超时功能*/ SET_BIT(huart1.Instance-》CR2,USART_CR2_RTOEN); /*使能超时接收中断*/ //SET_BIT(huart1.Instance-》CR1,USART_CR1_RTOIE); /*向RTOR寄存器填入需要超时的长度,单位为一个波特时长,3.5个字节*11波特长度 = 39 */ WRITE_REG(huart1.Instance-》RTOR,39); } 接着在main函数中添加这个函数,并且写了一个小小的测试实例。 int main(void) { /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /*使能超时检测*/ Uart_RxOvertimeEnable(); /* Infinite loop */ /*采用中断接收数据,模拟接收*/ HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 100); while (1) { //数据接收后,一直等待超时 while(READ_BIT(huart1.Instance-》ISR,USART_ISR_RTOF)) { /*清除rtof标志*/ SET_BIT(huart1.Instance-》ICR,USART_ICR_RTOCF); /*将接收的数据发送出去测试一下*/ HAL_UART_Transmit_IT(&huart1, (uint8_t *)aRxBuffer, 100); HAL_Delay(1000); } } } 最后通过串口调试助手通过上位机发送数据(this is test!)给单片机,单片机能返回数据(后面的***是因为打印了空字节,忽略),则证明有效。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1641 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1562 浏览 1 评论
988 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
691 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1608 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
655浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
525浏览 3评论
540浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
512浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 01:08 , Processed in 0.889033 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号