提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
学习目标:
简单了解通信原理,掌握串口通信原理已经如何操作stm32串口
二、通信的介绍:
*通信至少要有两个对象,一个收,一个发,根据数据通信是否同步,分为同步通信和异步通信
同步通信:一般情况下,同步通信指的是通信双方根据同步信息进行的通信方式。比如通信双方有一个共同的时钟信号,通信中通常双方会统一规定在时钟信号的上升沿或下降沿对数据进行采样(SPI就是典型的同步通信的方式)
异步通信:是指数据传输速率匹配依赖于通信双方有自己独特的系统是钟,大家约定好通信的速度,异步通信不需要同步信号,但是并不是说通信的过程不同步(串口就是典型的异步通信方式)
串行通信和并行通信的区别
串行通信:指的是同一时刻只能收或发一个bit位信息。因此只用1根信号线即可。
并行通信:指的是同一时刻可以收或发多个bit位的信息,因此需要多根信号线才行
串行传输:数据按位顺序传输。
优点:占用引脚资源少
缺点:速度相对较慢
并行传输:数据各个位同时传输。
优点:速度快
缺点:占用引脚资源多
单工:要么收,要么发,只能做接收设备或者发送设备。比如收音机
半双工:可以收,可以发,但是不能同时收发, 比如对讲机
全双工:可以在同一时刻既接收,又发送。 手机
常见的通信:
三、STM32F407 USART:
STM32F407有四个 USART 和两个 UART,其中 USART1和 USART6的时钟来源于 APB2 总线时钟,其最大频率为84MHz,其他四个的时钟来源于 APB1总线时钟,其最大频率为42MHz。
波特率在串行通信中,用“波特率”来描述数据的传输速率。所谓波特率,既每秒传送的二进制位数,其单位为bps(bits per second)。它是衡量串行数据速度快慢的重要指标。国际上规定一个标准的波特率列:110、300、600、1200、1800、2400、4800、9600、115200、14.4Kbps、19.2Kbps、……例如:115200bps、指每秒传送115200位。通信双方必须设置同样的同学速率才能正常通信。
注意:实际的数据没这么多,还包括起始位,结束位,校验位。
(1)STM32 USART寄存器介绍
控制寄存器——USART_CR
波特率寄存器——USART_BRR
状态寄存器——USART_SR
数据寄存器——USART_DR
重点:
位 7 TXE:发送数据寄存器为空 (Transmit data register empty)
0:数据未传输到移位寄存器
1:数据传输到移位寄存器
位 6 TC:发送完成 (Transmission complete)
0:传送未完成
1:传送已完成
位 5 RXNE:读取数据寄存器不为空 (Read data register not empty)
0:未接收到数据
1:已准备好读取接收到的数据
这些寄存器上面功能介绍的很明白了,相信看完就知道怎么通信,下面展示下核心代码
(2)核心代码:
void USART1_Putchar(uint8_t ch)
{
while(!(UASRT1->SR & (1 << 7)));//等待TDR为空,为空了才完里面写数据,如果没有就一直在这里循环
USART1->DR = ch;
}
uint8_t USART1_Getchar(void)
{
while(!(USART1->SR & (1 << 5)));//等待RDR收到数据不为空,不为空才去读数据,不然则一直循环
return USART1->DR;
}