网站首页 > 技术文章 正文
串口操作,这里要留意下,这个跟百度出来的大多数都不太一样,百度出来的stm32串口操作,大多数都是接收是中断方式,发送是轮训方式。这种方式在处理数据量稍微大点,就会把独占CPU。备注:这里是从csdn的一个大牛那整过来的。
主要是6个文件,一个fifo,bsp_uart, 以及提供类似针对上层接口的dev_uart. fifo 主要给发送和接收用,这里用了两个uart口,所以总共应该是创建了4个fifo。
bsp_uart: 主要是操作bsp,UART1,UART2的时钟初始化,以及DMA初始化。
dev_uart: 直接调用dev_uart里面的读写函数,来要数据和写数据。
fifo: 队列实现
备注:这里用UART2操作ESP8266,波特率如果比较高的话,比如115200,ESP8266复位数据会有很多数据上来,这里为了减少对串口这块的冲击故意降低了波特率,使用9600. 拿到ESP8266,需要先把波特率配置成9600.
代码简单的说明下:
配置Tx,Rx,一个是Floating,一个是PP。
主要这里一个串口使能了DMARx,DMATx中断,以及USART1_IRQn中断。并且使能了IDLE中断。
关于这个IDLE中断谈谈我这边的理解
波特率确定了之后,在串口上传输数据,每个字节间的时间是基本确定的,如果超过这里的时间就会产生IDLE中断。
举个例子:
//主机写串口
WriteFile(“hello world\n”);
写完之后,就会触发中断,如果代码写的变态
WriteFile(“h”); sleep(xx); WriteFile(“e”); sleep(xx);//这里每写一个字符到下一个发送周期,如果时间超过波特率确定的时间,就会有IDLE中断。所以单片机这边保险起见,收到数据了,不能想当然已经收全了数据,要尝试解析,解析不了返回到缓冲区(移动POS),过一会在尝试下。当然针对AT命令,可以预估一个经验时间,在这个时间之后,AT的返回肯定全部收到了(这里后面的ESP8236函数会用到)
猜你喜欢
- 2024-10-12 STM32单片机-多串口printf()问题与ASCII码解析
- 2024-10-12 stm32F0 串口的几个特殊功能 stm32f1串口引脚
- 2024-10-12 STM32串口发送用哪个中断? stm32f4串口发送数据
- 2024-10-12 STM32F103编程学习——USB虚拟串口篇
- 2024-10-12 STM32F4入坑日记——串口发送数据(非中断)
- 2024-10-12 STM32 HAL库串口中断发送过程 stm32f4串口中断
- 2024-10-12 在货物监控设备研发时,STM32串口第一个字节丢失解怎么解决?
- 2024-10-12 STM32单片机采用环形缓冲区实现串口中断数据接收管理
- 2024-10-12 基于STM32的串口与DMA的完美组合(上)
- 2024-10-12 STM32下载程序新思路--使用串口下载STM32程序
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)