历史上的今天
今天是:2024年10月11日(星期五)
2019年10月11日 | STM32F103 UART通信讲解
2019-10-11 来源:eefocus
一、串行通信的通信方式
1.同步通信:带时钟同步信号传输,有一根线是同步时钟。例如SPI(全双功)、IIC(半双工)通信接口
2.异步通信:不带时钟同步信号,必须约定好波特率。例如UART(全双功)
二、STM32的串口通信接口
UART:通用异步收发器。
USART:通用同步异步收发器。
STM32F10x系列包含3个USART和2个UART。

都是TTL电平交叉相连即可

与PC机可以使用USB-TTL进行通信。
三、通信引脚

四、常用串口相关寄存器
1.USART_SR状态寄存器:里面一些相关位可以用来判断是否发送接收完成等。
2.USART_DR数据寄存器:通过读写这个寄存器来发送接收数据
3.USART_BRR波特率寄存器:
波特率计算方法:波特率=fPLCLKX /(16*USARTDIV);USARTDIV=72000000/(115200*16)=39.0625
DIV_Fraction=16*0.0625=1=0X01;(小数部分)
DIV_Mantissa=39=0X27;(整数部分)
从而得到USART_BRR波特率寄存器的值为0X0271,这就是115200的波特率对应的寄存器值。
五、串口操作相关库函数
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
串口初始化:波特率,数据字长,奇偶校验,硬件控制流以及收发使能。
第一个成员变量是串口标号,第二个成员变量是结构体
typedef struct
{
uint32_t USART_BaudRate; //波特率
uint16_t USART_WordLength; //位长,8位或9位
uint16_t USART_StopBits; //停止位
uint16_t USART_Parity; //奇偶校验位
uint16_t USART_Mode; //使能输入输出
uint16_t USART_HardwareFlowControl; //硬件流控制
} USART_InitTypeDef;
void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);
使能串口
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);
使能相关中断
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
发送数据到串口
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
从串口接收数据
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
获取状态标志位
void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);
清除状态标志位
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);
获取中断状态标志位
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);
清除中断状态标志位
六、串口配置一般步骤
1.串口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);
2.串口复位(不是必须的)
USART_DeInit();
3.GPIO模式设置
对GPIO口输入输出的设置
4.串口初始化设置
USART_Init(USART1, &USART_InitStructure);
5.开启中断并且初始化NVIC
NVIC_Init();
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
6.使能串口
USART_Cmd(USART1, ENABLE);
7.编写中断处理函数
void USART1_IRQHandler(void)
8.串口数据收发
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
9.串口传输状态获取
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);
七、串口初始化程序编写
void uart_init(u32 bound){
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);
//GPIOA.9发送GPIO配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//GPIOA.10接收GPIO配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// NVIC 配置(在主函数中需要对NVIC设置分组)
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//对USART配置波特率、停止位、校验位等配置
USART_InitStructure.USART_BaudRate = bound;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//使能接收中断
USART_Cmd(USART1, ENABLE); //使能串口
}
史海拾趣
|
驱动使用DDK写的,不是DS+DDK,以前用DS+DDK的时候是应用把一个Event的HANDLE传进去,然后驱动里面用传进来的HANDLE生成一个KEVENT,应用那里启动一个线程,线程里面等待那个Event就行了,这样当发生中断时驱动的DPC就把KEVENT设置,应用的那个线程就 ...… 查看全部问答> |
|
初学DSP,用了一片TMS320VC5409和10M无源晶振,板子做起来以后不能用,测量时钟信号发现X1管脚的信号是一个比较畸形的正弦波,X2管脚的波形是一个规则的正弦波;但是时钟输出CLKOUT的波形则是在高低电平两个位置剧烈震荡。由于对晶振和时钟信号不熟 ...… 查看全部问答> |
|
430单片机12位AD一路采集温度一路采集电压程序该如何配置和处理 我用的是MSP430F149单片机想用12位的AD来采两个外部传感器的电压但是。其中用到P6.0和P6.1,我还未链接外部传感器P6.0和P6.1就已经有电压;而且两个显示的都不一样分别为1.86 1.97,用万用表去测量时P6.0和P6.1分别是3.35& ...… 查看全部问答> |
|
2012TI杯山东省大学生电子设计竞赛 基本仪器和主要元器件清单 1、基本仪器清单 数字电桥 直流稳压电源 量角器 米尺 四位半数字万用表 0~200℃温度 ...… 查看全部问答> |
|
元芳:大人,听说玉渊潭的樱花开的正好,不知大人要不要带我等同去观玩一番?狄:元芳,还是先把前日问题说完。樱花明年还会带开,先练就一身本领,明年樱花更艳……元芳:大人……狄:照数据手册推荐,高于500Hz使用III型反馈网络,即反馈电阻高端 ...… 查看全部问答> |




