STM32串口学习理解(通俗易懂)

今天再一次学习stm32,比之前学习感觉思路清晰一些了,先来看看串口的框图,上图从下往上看

1.最下面fpclkx为时钟输入,x=1或2(如USART1挂载在APB2,fpclk2就是72M,其它usart挂载在APB1,fpclk1就是36M,通过USARTDIV进行分频,USARTDIV的值通过右边红框中DIV_Mantissa和DIV_Fraction设置整数部分和小数部分(为什么这样做?如72M除以一个整数会出现除不尽,导致误差大),DIV_Fraction支持4位小数,分频后的值还要再除以16,就会得到发送器时钟和接收器时钟的值(图中1和2的红色线),分别给发送器控制和接收器控制提供时钟源。

2.来到图片中间位置,发送器和接收器控制主要用于控制发送移位寄存器、接收移位寄存器的工作,以及各种标志位控制,硬件数据流控等(什么是硬件数据流控:假如发送的很快,接收来不及接收,会导致后面发的数据丢失,为了避免这个问题,增加了这个器件,发送端发完数据,接收端接收完成通过一根线告诉发送我接收完了,继续发,就不会出现数据接收不完丢失问题),控制器这里有多条线,我们关注主要的收发数据控制这里,即图中绿色线。这里注意2个标志位(紫色框)TXE-发送数据寄存器空和RXNE-接收数据寄存器非空,移位寄存器那里会去置这两个标志位。

3.通过控制器绿色线来到顶部区域,先讲讲接收的流程:最左边RX接收到数据,通过紫色线来到接收移位寄存器,数据一位一位的放到接收移位寄存器,一个字节放完了就把数据放到接收数据寄存器中,此时接收移位寄存器就空了,RDR中就有数据了,此时接收器控制就会把RXNE置1,然后CPU或DMA就把RDR中数据读走了。再来看发送的流程:顶部PWDATA把需要发送数据通过写操作写到发送数据寄存器TDR,TDR把数据放到发送移位寄存器,然后发送数据寄存器就空了,此时发送器控制会将TXE置标志位1,表示发送器数据寄存器现在是空,可以继续写数据到TDR中,发送移位寄存器通过上面紫色线将数据一位一位的传送到TX发送出去。

总结:以上步骤1 2 3就是串口收发数据流程。需要注意顶部灰色底色区域,包含4个寄存器,其中发送数据寄存器TDR和接收数据寄存器RDR在程序上只表现为一个寄存器,叫DR(数据寄存器),这里类似于51单片机的SBUF。以上先把主要用的流程讲通,其它慢慢补充。

补充:

1.RE和TE:图片底部波特率发生器中TE为发送器使能,使能后发送器部分波特率就有效,RE同理

2.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值