STM32的USART外设:
自带波特率发生器,最高可达4.5Mbits/s
可配置数据位长度(8/9),停止位长度(0.5/1/1.5/2)
可选校验位(无校验/奇校验/偶校验)
STM32F103C8T6的USART资源:USART1(APB2总线),USAR2(APB1总线),USART3(APB1总线)。
硬件部分:

执行过程:

波特率发生器产生约定的通信速率,产生的时钟通向发送控制器和接收控制器,用来控制发送移位和接收移位。之后由发送数据寄存器和发送移位寄存器配合,移出数据(右移,低位先行),通过GPIO复用输出,输出到TX引脚。RX引脚通过GPIO复用输入,移动到接收寄存器(右移,低位先行),然后转移到RDR,同时置一个RXNE标志位(既可检查是否收到,也可申请中断)。
数据采样:

以波特率的16倍频率采样,在某个位置,突然采集到0,说明出现了下降沿,然后进行连续16位采样,在下降沿的第3,5,7次进行一批采样,8,9,10次进行一批采样,这两批,,每3位里都要有至少2个0。若有一个1,会置一个NE,即噪声标志位。若通过检测,之后每次都在8,9,10位进行采样(正好在正中心采样)。
波特率发生器(寄存器):
波特率由波特率寄存器BRR里的DIV来确定。

波特率 =(一般为72M) /(16*DIV)
举例:若要配置波特率为9600,9600 = 72M/(16*DIV) 即 DIV = 72M/9600/16=468.75,然后转换成二进制,468.75 = 11101 0100.11
所以写入BRR寄存器,DIV15~0:0000 11101 0100 1100 (整数部分前面补0,小数部分后面补0)
串口发送+接收:
接线:
USB转串口模块:VCC和3V3用跳线帽接在一起,TXD接PA10,RXD接PA9。、
(因为USART1_TX是PA9,USART1_RX是PA10,所以TX接RX,RX接TX,交叉连接)
串口发送:





一些SendByte的拓展函数:



串口接收+发送:
#include "Device/Include/stm32f10x.h" // Device header
#include <stdio.h>
#include <stdarg.h>
uint8_t Serial_RxData;
uint8_t Serial_RxFlag;
void Serial_Init(void)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
//RCC_APB1PeriphClockCmd(RCC_APB1Per

最低0.47元/天 解锁文章
897

被折叠的 条评论
为什么被折叠?



