网站首页 > 技术文章 正文
大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助头条平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学课件分享出来,如果您正是一名单片机爱好者或是一名同行,欢迎点赞+关注,各位的支持是本人持续输出的动力,多谢多谢!#30天学会STM32##单片机#
通信,按照传统的理解就是信息的传输与交换。对于像STM32这样的单片机来说,通信则与传感器、存储芯片、外围控制芯片等技术紧密结合,成为整个单片机系统的“神经中枢”。没有通信,单片机所实现的功能仅仅局限于单片机本身,就无法通过其它设备获得有用信息,也无法将自己产生的信息告诉其它设备。如果单片机通信没处理好的话,它和外围器件的合作程度就会受到限制,最终整个系统也无法完成强大的功能,由此可见单片机通信技术的重要性。UART(Universal Asynchronous Receiver/Transmitter,即通用异步收发器)串行通信是单片机最常用的一种通信技术,通常用于单片机和电脑之间、单片机和单片机之间、单片机与外围器件的通信。
【学习目标】
- 知道通信基本概念的含义;
- 理解通信机制中物理层和协议层分离的理念;
- 学会配置STM32的串口功能;
- 了解printf()函数“打印”至串口的实现过程;
- 掌握使用串口调试软件对单片机的调试方法。
STM32串口通信涉及的知识较多,为了不让篇幅太长,本章打算分五个部分来讲解,本文是第三部分。
三、STM32串口必知的关键信息
STM32的串口资源相当丰富的,功能也相当强劲。我们所使用的STM32F103RET6最多可提供5路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持LIN、支持调制解调器操作、智能卡协议和 IrDA SIR ENDEC规范、具有DMA等。对于初学者,暂时不必去硬啃这些复杂的功能,关注最基本的用法和配置即可。
3.1 用串口“打印”调试信息
虽然STM32的串口功能异常强大,但最基本的应用就是“打印”程序信息,一般在硬件设计时都会预留一个串口连接电脑,用于在调试程序时把一些信息“打印”在电脑端的串口助手软件上,从而了解程序运行是否正确、如果出错了具体哪里出错等,图13展示了通过串口“打印”调试程序的场景。
3.2 USART与UART
通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。有别于USART还有一个UART(Universal Asynchronous Receiver and Transmitter),它是在USART 基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是UART。
3.3 STM32串口引脚分布
STM32F103RET6有三个USART和两个UART,引脚分布见表1。其中USART1的时钟来源于APB2总线(最高72MHz),其他四个的时钟来源于APB1总线(最高36MHz)。UART只是异步传输功能,所以没有SCLK、nCTS和nRTS功能引脚。
如图14所示,我们的开发板使用了USART1和USART2,前者用来“打印”调试信息,后者用来与开发板上的WiFi或GPRS模块通信。这里我们只关注前者,并在表1中做了底纹标注,这两个引脚的配置会在下面讲解串口初始化的时候体现出来。
四、STM32串口编程准备
4.1 串口初始化结构体详解
通过前面的实验我们已经知道,标准库函数对每个外设都建立了一个初始化结构体,串口也不例外,即USART_InitTypeDef,结构体成员用于设置串口工作参数,并由串口初始化配置函数USART_Init()调用,这些设定参数将会设置串口相应的寄存器,达到配置串口工作环境的目的。
USART初始化结构体定义在stm32f10x_usart.h中,我们将其摘录在代码清单1中。初始化库函数定义在stm32f10x_usart.c中,编程时我们可以结合这两个文件内注释使用。
- USART_BaudRate:波特率,一般设置为2400、9600、19200、115200。
- USART_WordLength:数据帧字长,可选USART_WordLength_8b(8位)或USART_WordLength_8b(9位)。如果没有使能奇偶校验控制一般使用8数据位;如果使能了奇偶校验,则一般设置为9数据位。
- USART_StopBits:停止位设置,可选USART_StopBits_0_5(0.5个)、USART_StopBits_1(1个)、USART_StopBits_1_5(1.5个)和USART_StopBits_2(2个)停止位,一般我们选择1个停止位。
- USART_Parity :奇偶校验控制选择,可选USART_Parity_No(无校验)、USART_Parity_Even(偶校验)、USART_Parity_Odd(奇校验)。
- USART_Mode:USART模式选择,有USART_Mode_Rx和USART_Mode_Tx,允许使用逻辑或运算选择两个。
- USART_HardwareFlowControl:硬件流控制选择,只有在硬件流控制模式才有效,一般选择不使能硬件流。
4.2 串口通信与中断控制
我们在使用串口进行数据收发时往往需要配合中断来进行控制,尤其是当STM32接收到从PC端发来的信息时,程序跳转至相应的中断服务函数中运行。当然,STM32为串口规划了好多的中断请求事件,见表2。可以说,STM32串口通信过程中的任何风吹草动都可以引起中断,就看你程序需不需要而已,但我们常用的也就是表中用底纹标记的两类。
(第三部分完,共五部分)
猜你喜欢
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)