嵌入式学习(STM32F103)-如何实现串口通信
·
处理器与外部设备通信的两种方式:
1.并行串口
可以理解为要连接的时候用了很多条线来连接。比如6条,然后6条线同时传输数据
2.串行通信
一条线,传输数据,一个一个的传输,比如总数20,他一条线的速度5,需要穿4秒,这样,然后并行串口酒需要20/6=秒。
串行通信
按数据传送方向:
单工:只允许一个方向
半双工:允许两个方向,但是不能同时传送
全双工:允许同时2个方向的传送
按通信方式:
同步通信:带时钟信号的传输(SPI)
异步通信:不带时钟信号的传输(USART),所以需要设置波特率,通过波特率来解析你传输的数据
常用串行通信接口:

UART正常接口就是TXD(数据输出引脚)接RXD(数据输入引脚)。RXD接TXT。GND与GND连接

代码编写:
1.使能串口与使能时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟
2.初始化GPIO
定义结构体
GPIO_InitTypeDef GPIO_IniStrue;//定义结构体
随后进行初始化
GPIO_Inistrue.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Inistrue.GPIO_pin=GPIO_PIN_9;
GPIO_Inistrue.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Inistrue.GPIO_Mode=GPIO_Mode_IN_FLOATTNG;
GPIO_Inistrue.GPIO_pin=GPIO_PIN_10;
GPIO_Inistrue.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_IniStrue)
3.初始化USART
首先定义结构体
USART_InitTypeDef USART_IniStrue;//定义结构体
进行初始化
USART_IniStrue.USART_BaudRate = 115200;//串口波特率
USART_IniStrue.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
USART_IniStrue.USART_StopBits = USART_StopBits_1;//一个停止位
USART_IniStrue.USART_Parity = USART_Parity_No;//无奇偶校验位
USART_IniStrue.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
USART_IniStrue.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
USART_Init(USART1,&USART_IniStrue);
4.使能串口
USART_Cmd(USART1,ENABLE);
5.开启中断并初始化NVIC
NVIC_InitTypeDef NVIC_InitStructure;
随后进行初始化
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
更多推荐


所有评论(0)