1、串口的使用方法

在hal库中,有三个串口发送的函数

a、HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

b、HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

c、HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

其中,HAL_UART_Receive会超时的变量,就是说发送5给字节,如果一个字节发送需要5ms(假设),如果超时设置为20ms,那么只能发送4给字节,后续的字节就不发送了,通信就不正常了,而且是阻塞式的发送,只有发送完成了,才能执行后续的代码。所以通常只能用于

数据量比较少的地方。

HAL_UART_Receive_IT和HAL_UART_Transmit_DMA两个函数,没有超时,说明是非阻塞式发送,基本上不会占用cpu的太多的资源,而且发送完成有出发中断的功能。另外DMA的方式还有发送一半的中断,因此控制起来有多了一层功能。

2、串口接收也有三个函数

a、HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

b、HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

c、HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

HAL_UART_Receive是阻塞式的接受函数,因此不建议使用,通常在开发过程中,基本上使用HAL_UART_Receive_IT和HAL_UART_Receive_DMA两个函数

目前我使用中断接受数据,dma发送数据,基本没有问题,如果加上定时器来判断空闲,基本上就实现了modbus的数据协议了。

最新文章

  1. dump、cpio、tar、dd四种备份工具比较
  2. 如何解决ASP.NET网站'__doPostBack' is undefined的脚本错误
  3. 1121 if条件语句练习--输入年月日判断执行
  4. [转载] 根据多年经验整理的《互联网MySQL开发规范》
  5. ubuntu下安装jdk(rpm版)错误: 找不到或无法加载主类 解决方法
  6. WP7应用版本升级的实现方法
  7. uvaIrrelevant Elements
  8. JS遍历对象或者数组
  9. 『SQL注入』 User-Agent 手工注入的探测与利用分析
  10. <item.../>元素可指定如下常用属性
  11. Redis分布式缓存 教程以及DEMO
  12. C#多线程实践——创建和开始使用
  13. 加密解密工具类(Java,DES)
  14. Mybatis学习(8)逆向工程
  15. Docker自动补全容器名
  16. Maven入门指南⑥:将项目发布到私服
  17. Asp.net Mvc Ajax.BeginForm提交表单
  18. cookie和session必须了解的东西
  19. Java里的String类为什么是final的
  20. 【转】chrome devtools protocol——Web 性能自动化

热门文章

  1. Django-01-Web框架简介
  2. free(分层图最短路)(2019牛客暑期多校训练营(第四场))
  3. GitHub Action一键部署配置,值得拥有
  4. C# vb .net实现扭曲角特效滤镜图像处理
  5. windows下pyinstaller打包踩坑记录
  6. kubernetes第七章--管理存储资源
  7. 解决SecureCRT 中文乱码??
  8. 常用 SQL*Plus 命令
  9. JAVA - Windows下JDK默认安装的配置参数
  10. Tomcat启动时一闪而过,看不多错误信息解决方案