轻松搞懂STM32F407串口通信(USART)

发布者:老桃子最新更新时间:2022-08-05 来源: csdn关键字:STM32F407  串口通信  USART 手机看文章 扫描二维码
随时随地手机看文章

串口通信就是一个码元一个码元的发送数据,并行通信就是多个码元同时发送,码元简单来说就是承载信息的信号单位,如二进制码元就通过高低电平来承载信息,那么一个码元就是一个高电平或低电平。


串口基础标准

串口数据帧格式

这张图描述了串口的一个数据帧格式


 1:空闲电平为高电平


2:起始信号为下降沿加上一个位的低电平


3:传输数据(通常为八位的,也有些标准定义为其他位数)


4:校验位,这里分为奇偶校验和01校验,当然也可以没有这个位,也就是不需要校验


        (1)奇校验:在数据中,1的个数为奇数该位为1,1的个数为偶数则该位为0;


        (2)偶校验:在数据中,1的个数为偶数该位为1,1的个数为奇数数则该位为0;


        (3)01校验:无论数据如何,校验位都为0(0校验)或者都为1(1校验);


5:停止信号为0.5个位到2个位的低电平加上上升沿。


6:空闲电平


USART传输模式


        1:同步与异步


        同步传输:就是通过一个时钟线,在时钟节拍下进行传输,这样传输更为精确


        异步传输:就是规定在一秒内所传输的波特率,来传输数据,这样虽然不精确但是少根线


        2:单线模式与调制解调器模式


        调制解调器模式:使用CTS和RTS做硬件流控制的模式(CTS和RTS下面有描述)


        单线模式:只使用RX与TX进行传输


过采样率


        为了得到一个一个位真正的电平状态,过滤掉噪声波,需要对一个位的电平进行多次采样,也就是高于数据传输的频率进行采样,这样的采样被称为过采样。在STM32中,一般为八位过采样以及十六倍过采样,也就是以数据传输频率的8倍或者16倍进行采样,即对一个数据位采样8次或者16次。


RS232标准


电平标准:


RS232标准的电平规定(高电平,低电平为-5v和15v)


TTL标准的电平规定(0v和5v)


在实际进行串口调试时,通常需要用单片机连接电脑,这时通常需要转化芯片,将TTL电平转换为RS232电平然后将USART转换为USB,这些可以通过CH340等芯片实现。


物理层标准


注1:公头DTC(针头),母头DCE(孔头)。以下图片来自野火手册


注2:一般在实际中,只用三根线TX和RX以及GND,像这种9个头的玩意只在一些老式电脑主机和工业级交换机以及路由器上有,基本不需要管,(我之前在搞网络的的时候见过一堆头的串口,那是用来做专线出口的,一般能拉几公里,但是现在随着VPN技术的兴起,这玩意也就用的少了。)

 

STM32串口外设

先祭出官方USART(Universal Synchronous Asynchronous Receiver and Transmitter)框图,在STM32中,还有UART,也就是没有Synchronous,及只有异步,没同步。但是能看懂USART那么UART自然不再话下。

1:引脚部分


        RX:接收


        TX:发送


        SW_RX智能卡,没外部引脚,不用管


        nRTS:硬件控制引脚,n表示低电平有效,当接收寄存器为空时置为低电平表示准备好接收了,当接收寄存器满时置为高电平表示当前不接收。该引脚与上方RS232对应。


        nCTS:硬件控制引脚,n表示低电平有效,当准备发送一个帧时,检测该引脚,如果为低电平则继续发送,如果为高电平则停止发送。如果数据正在发送还未发送完成检查到nCTS为高电平,则发送完当前数据后再停止发送。该引脚与上方RS232对应。


        SCLK:同步时钟引脚。


        nRTS和nCTS同属于硬件流控制引脚,在单片机中是为了解决主机是否准备好接收与主机是否可以发送的问题,但是在通信协议中是为了防止在多台设备通信时,收发的信道冲突问题。现在基本用不到了。


引脚连接方式如下

各引脚表

2:数据收发器(DR寄存器)


        在STM32中,收发寄存器为DR寄存器,该寄存器有两个,一个TDR做发送缓冲,一个RDR做接收缓冲,DR寄存器高位保留,[0,8]共九位位用于存放数据以及校验位。写入DR寄存器则为写入TDR寄存器,读取DR寄存器则为读取RDR寄存器。DR寄存器为两个寄存器但是寄存器地址相同。


        DR寄存器读写可以由软件进行,也可以由DMA进行,DMA后面章节会介绍到


3:控制器(CR1,CR2,CR3寄存器)


        控制了一些东西,如帧的长度,校验方式,过采样,使能与失能等等。具体的请看手册。


4:波特率生产器(OVER8寄存器)


        这玩意还是比较扯淡的一个东西。STM32的波特率生产不是那么的精确。这里面存放的是一个USART的分频系数。


        可能有人会说,这个东西是APB到USART的分频系数,用于从APB得到一个频率来符合发送的频率,也就是从APB中得到波特率。


        但是实际上,根据公式:波特率 = PLCK/(过采样倍数 * USART分频系数)


        可以得出一个结论,USART的波特率,实际上是根据从PLCK分频得到的过采样频率分频而来。USART分频系数是过采样频率分频到波特兰的分频系数。不明白的话把这个拆分开就是:波特兰 = (PLCK/过采样倍数) / USART分频系数。设:(PLCK/过采样倍数) = 过采样频率,即可得到,过采样频率/USART分频系数 = 波特率。


        OVER8分小数部分和整数部分,对这个怎么算感兴趣的话看看官方手册或者野火的手册,反正库函数只需要输入波特率就行了。


        但是要明白这玩意是有误差的,115200实际是115228,这点误差是可以有的,但是属实不太舒服。


5:标志器(SR寄存器)


        一些功能的标记位。这东西要想搞懂直接看手册把,库函数的下面会讲解。


6:保护时间和预分频寄存器(GTPR)


        该寄存器有三部分部分


        保留部分:[16,31]保留


        [8,15]GT部分,设置智能卡的保护时间,不用管


        [0,7]预分频系数,在低功耗模式下,用于给PLCK到USART外设的时钟分频达到降低功耗。

关键字:STM32F407  串口通信  USART 引用地址:轻松搞懂STM32F407串口通信(USART)

上一篇:轻松搞懂STM32F4之DMA
下一篇:ad7606与stm32连接电路介绍

推荐阅读最新更新时间:2024-11-13 07:48

STM32F407 独立看门狗 (IWDG)
概述 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都会陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续正常工作,会造成整个系统的陷入停滞状态,发生不可预料的后果。 看门狗(守护)就是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号的电路。看门狗命令在程序的中断中拥有最高的优先级。 单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间
[单片机]
stm32 USART_IT_IDLE
请注意IDLE中断是只检测到空闲帧时产生的中断。 而空闲帧的定义是:被视为完全由 1"组成的一个完整的数据帧,后面跟着包含?数据的下一帧的开始位。 关键是后面半句话,要求有下一帧的开始位,而你的情况恰巧没有下一帧的开始位(传输已经结束),当然不会有中断了。 举例: 如果连续发送一串字符串 123 会发生空闲中断吗? 不会,因为没有下一帧的开始位。 如果进了空闲中断不手动清零,会一直进入空闲中断。 所以用这个IDLEIE来结束DMA方式的接收,是合适的。唯一一个不合适的地方是:如果你发送一个字符串后,将DMA设置好接收传输方式,然后:对方没响应,你一个字符也收不到,这时候,IDLEIE是不会来的,必须有个总超时检测来结束DM
[单片机]
stm32f407之外部中断使用流程
1.初始化 1.初始化相关结构体 NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; 2.打开SYSCFG SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); 3.配置EXTI EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrup
[单片机]
51单片机串口通信原理与应用
  这节我们主要讲单片机上串口的工作原理和如何通过程序来对串口进行设置,以及根据所给出的实例实现与PC 机通信。   一、原理简介   51 单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信。其缺点是传输速度较低。   与之前一样,首先我们来了解单片机串口相关的寄存器。   SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是
[单片机]
51单片机<font color='red'>串口通信</font>原理与应用
分享关于stm32f407定时器时钟频率的问题
上午想要用Timer10做相对精确的延时功能,但是用示波器发现实际延时数值总是只有一半,百思不得其解。 仔细查阅各处资料结合实际研究后对stm32f407的14个定时器的时钟做一个总结: 从时钟树中我们可以得知(时钟树的图片可以直接参考6楼,感谢6楼xkwy补上的图): (1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线 (2)通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时钟来源是APB1总线 从STM32F4的内部时钟树可知,当APB1和APB2分频数为1的时候,TIM1、
[单片机]
STM32单片机的Usart2串口的调试方法
先是参考http://wenku.baidu.com/view/78f6b1350b4c2e3f572763e9.html调通了usart1 然后将程序进行修改,对Usart2进行配置,配置完了之后,程序还是没有正确,然后在voidGPIO_cfg();函数中添加一句 GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE); 最后程序如下, #include“stm32f10x_lib.h” FlagStatusRX_status; FlagStatusTx_status; voidRCC_cfg(void); voidGPIO_cfg(void); voidUSART_cfg(void);
[单片机]
STM32单片机的<font color='red'>Usart</font>2串口的调试方法
atmega16串口通信
ATmega16 单片机带有一个全双工的通用同步/异步串行收发模块USART,该接口是一个高度灵活的串行通讯设备。其主要特点如下: 全双工操作,可同时进行收发操作; 支持同步或异步操作; 支持5、6、7、8 和9 位数据位,1 位或者2 位停止位的串行数据帧结构; 三个完全独立的中断,TX 发送完成,TX 发送数据寄存器空,RX 接收完成; 支持多机通讯模式; 相关寄存器: USART 数据寄存器 UDR; USART 控制和状态寄存器 UCSRA,UCSRB,UCSRC; 波特率寄存器 UBRRL 和UBRRH; 串口背景知识 (1)串行通讯简介 串行同步通讯容易理解,约定一个同步时钟,每一时刻传输线上的
[单片机]
STM32中如何使用printf()函数?
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。 下面就说一下使用printf需要做哪些配置。 有两种配置方法: 一、对工程属性进行配置,详细步骤如下 1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。 2、在main文件中重定义函数 如下: // 发送数据 int fputc(int ch, FILE *f) { USART_SendData(USA
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved