下面是9针串口的各个引脚
串口通信时序图
一组数据是由起始位+数据位+奇偶校验位+停止位组成。
起始位
下降沿信号触发,表示数据开始传输。
数据位
有5~8位,一般采用8位,因为我们平时传输的英文字符,是使用8bit的字节来进行ascall码表示的。
奇偶校验位
如果数据中的“1”的总数为奇数个,那么就是奇校验。
如果数据中的“1”的总数为偶数个,那么就是偶校验。
停止位
一般有1、1.5、2位表示,一般使用1位。
源码
以stm32f103c8t6为例
实际上是利用USART_SendData()这个函数进行按字节发送。和USART_GetITStatus()函数判断接收中断位是否发生改变来进行接收数据。
uart.c
#include "uart.h"
void uart_config(void)
{
/* GPIO端口设置 */
USART_InitTypeDef USART_InitStructure = {
0};
NVIC_InitTypeDef NVIC_InitStructure = {
0};
GPIO_InitTypeDef GPIO_InitStructure = {
0};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
/* PA2 TXD2 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* PA3 RXD2 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure