使用stm32CubeMX自动配置的工程文件,进行串口的不定长接收(非DMA方式)
2017-08-23 09:00
323 查看
方法描述:使用stm32CubeMX自动配置的工程文件,进行串口的不定长接收(非DMA方式)。
实际问题解决尝试:1.HAL库函数只有接收定长数据HAL_UART_Receive()和HAL_UART_Receive_IT();函数声明如下:
通过查看论坛等找到的解决方式,一种是通过HAL_UART_Receive_IT(&huart1,(uint8_t *)buffer,1);来进入串口中断回调函数HAL_UART_RxCpltCallback();函数原型如下:
实际测试中,这种方式每次都需要去调用HAL_UART_Receive_IT函数,系统处理效率低。
2.通过审查生成的代码,如下所示:
首先是串口中断的代码,只有一条语句:
进行go to definition,可以看到接收中断会进入UART_Receive_IT这个函数。
继续往下级看,则可看到下图画线处所示,UART的RXNE中断使能被关闭了。
所以,另一种解决方法是将这一句给屏蔽掉,HAL_UART_Receive_IT只需要执行一次就可以了,类似于打开RXNE中断的操作。但是,这种方法不好的地方在于,如果stm32cubeMX里重新配置并生成代码的话,这个地方的屏蔽会重新打开,也就是说每重新生成一次代码,cube工程不在用户操作区的改动都会被撤回。如果代码只是最终版本,这并无多大关系,如果后续还有其他的功能添加,则会很麻烦。
3.如果cubeMX配置的串口没有开启RXNE中断的话,那我们在初始化处添加试试:
经过测试,在经过初始化后,程序能够成功DEBUG进入串口中断函数,所以对串口中断里添加我们自己的处理函数即可,本人的处理代码是通过改编原子的串口代码而成,当然你也可以添加自己的处理算法,根据实际问题而定。这种方式即使重新生成工程,所做的处理也不会更改。
以下是本人实际测试代码:
通过KEIL的DEBUG测试,通过此方法处理的程序,在运行到HAL_UART_IRQHandler函数中时,由于串口ORE位会置位为1,
errorflags = (isrflags & (uint32_t)(USART_SR_PE | USART_SR_FE | USART_SR_ORE | USART_SR_NE));相应的不能够为RESET,则UART_Receive_IT函数并未能够进入,所以__HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);这句也就不能够被执行到。
下图为实际测试效果图:
图中时间并不是正确时间,且由图可看出即使间隔10ms发一次数据,串口端都能够对数据进行准确接收方便程序处理。
相关文章推荐
- SpringCloud系列九:SpringCloudConfig 基础配置(SpringCloudConfig 的基本概念、配置 SpringCloudConfig 服务端、抓取配置文件信息、客户端使用 SpringCloudConfig 进行配置、单仓库目录匹配、应用仓库自动选择、仓库匹配模式)
- Java工程Properties配置文件注释中文,会自动转换为其他编码方式问题解决
- STM32CubeMX串口接收数据(DMA方式,HAL库)
- Commons-Configuration2简介、使用方式、代码范例 -- 自动重新加载配置文件、监听器、处理器、自定义检测器
- STM32使用串口1配合DMA接收不定长数据,大大减轻CPU载荷。
- 代理自动配置文件-pac文件格式以及使用方式
- STM32使用串口1配合DMA接收不定长数据,减轻CPU载荷
- STM32使用串口IDLE中断的两种接收不定长数据的方式
- STM32使用串口1配合DMA接收不定长数据,大大减轻CPU载荷。
- FCKeditor是使用非常广泛的HTML编辑器,本文从 ASP.NET 的使用场景对 FCKeditor 与 FCKeditor.NET 的配置、功能扩展(如自定义文件上传子目录、自定义文件名、上传图片的后期处理等)、以及安全性进行初步的阐述。
- 学习使用AutoMake1.9的自动生成工程文件(二)——flat型程序编译实践过程
- 使用缓存配置文件以声明方式设置页的可缓存性
- 利用配置文件修改IIS使用的最大虚拟内存和自动回收时间
- 通过xml配置文件方式来进行输入校验
- WCF步步为营(三):使用配置文件改变使用服务的方式
- IIS7 上配置 FTP7 使用 IIS管理凭据 方式进行验证 推荐
- PB使用WININET的FTP方式自动更新(三、获得要更新的文件数)
- C#使用WINAPI进行读取写入配置文件_C#【编程联盟】
- 学习使用AutoMake1.9的自动生成工程文件(一)——网络文章摘要
- 用Properties读取配置文件后,使用TreeMap对keys进行排序