串口是一种可以让两个设备之间进行收发数据的接口,发送和接收共用的可编程波特率,最高达4.5Mbits/s,波特率越高数据传输速度越快,支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。
简而言之波特率(Tx / Rx)就是设备在发送数据时,数据在信道上的传输速度。波特率的计算公式:
fCK定时器的时钟频率(USART1使用APB1的时钟频率一般为72MHZ),USARTDIV是定时器1的重载值。
设置波特率时的误差计算,,一般用序号2和序号5:
什么是状态寄存器呢?状态寄存器就是能够检测当前串口窗口状态的寄存器。它一共可以检测的位共有32位,如读数据寄存器非空、发送完成、发送数据寄存器空等,其中10~31位为保留位,在这里使用位7 TXE:发送数据寄存器空
数据寄存器由两个寄存器组成,主要完成数据的收发,一个给发送用(TDR),一个给接收用(RDR),该寄存器兼具读和写的功能,最大只能放8位数据,提供0~8位使用,其中一位用作奇偶校验位。
配置串口的波特率,控制CPU发送的频率。
在STM32中每个串口都有3个控制寄存器CR1~CR3,在这里学习控制寄存器1,CR1表示主要的基本配置寄存器,能实现配置数据位、校验位、停止位、使能位(串口发送、串口接受、串口使能)等,本篇文章学习位2RE:发送使能(Transmitter enable)、位3TE:接收使能 (Receiver enable)以及位13UE:USART使能 (USART enable),位13在最后配置,功能开启串口模块。
(1)usart.c文件
{
/*GPIO口的配置*/
RCC->APB2ENR|=1<<2;//PA
GPIOA->CRH&=0xFFFFF00F;
GPIOA->CRH|=0x000008B0;
/*配置串口相关寄存器*/
RCC->APB2ENR|=1<<14;//打开USART1时钟
RCC->APB2RSTR|=1<<14;//打开USART1复位
RCC->APB2RSTR&=~(1<<14);//关闭USART1复位
USART1->BRR=72000000/baud;//用来控制CPU发送的频率
USART1->CR1|=1<<2;//开启串口接收功能
USART1->CR1|=1<<3;//关闭串口接收功能
USART1->CR1|=1<<13;//开启串口模块
}
(2)main.c文件
{
int Value=0;
KEY_Init();
LED_Init();
USART1_Init(115200);//USART初始化
while(1)
{
Value=KEY_GetValue();
switch(Value)
{
case 1:
USART1->DR='A';//串口发送数据
while(!(USART1->SR&1<<7)){}
LED1=!LED1;
break;
case 2:
USART1->DR='q';
while(!(USART1->SR&1<<7)){}
LED0=!LED0;
break;
case 3:
USART1->DR='z';
while(!(USART1->SR&1<<7)){}
LED1=!LED1;
LED0=!LED0;
break;
}
}
}
(3)实验效果
我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。