两种通信方式:
并行通信:数据各个位同时传输。
串行通信:数据按位顺序传输。
串行通信,按数据传送方向,分为:
单工:
数据传输只支持数据在一个方向上传输,只支持数据从发送端传输到接受端,只有一个方向,单向传输。
半双工:
允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输(不能同时传输的),它实际上是一种切换方向的单工通信。
全双工:
允许数据同时在两个方向上传输(同时),因此,全双工通信是两个单工通信方式的结合,他要求发送设备和接受设备都有独立的接受和发送能力。
串行通信的通信方式
同步通信:带时钟同步信号传输,如SPI和IIC通信接口
异步通信:不带时钟同步信号,如UART(通用异步收发器)和单总线,(需要通信双方事先约定,比如串口,就必须约定好波特率)
STM32的串口:
UART:通用异步收发器
USART:通用同步异步收发器,也可以作为UART来使用
偶校验:1的个数是偶数
奇校验:1的个数是奇数
常用的串口相关寄存器
USART_SR状态寄存器
RXNE:读数据寄存器非空
当RDR移位寄存器中的数据被转移到USART_DR寄存器中,该位被硬件置位(也就是说串口接收到了数据)
TC:发送完成
当包含有数据的一帧发送完成后,并且TXE=1时,由硬件将该位置’1’。
USART_DR数据寄存器,USART_CR1控制寄存器1
USART_BRR波特率寄存器
注:小数部分乘以16就是BRR寄存器的小数值。
串口操作相关库函数
void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
FlagStatus USART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatus USART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断状态标志位
串口配置的一般步骤
1.串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd()
2.GPIO端口模式设置:GPIO_Init(); 输出模式设置为GPIO_Mode_AF_PP
3.串口参数初始化:USART_Init();
4.开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();通道在stm32f10x.h文件中以IRQn结尾的第190左右
USART_ITConfig();
5.使能串口:USART_Cmd();
6.编写中断处理函数:USARTx_IRQHandler();
7.串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
8.串口传输状态获取:
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);