前言
自己理解: 串口:标准串口 异步串行全双工 IIC:同步串行半双工 最高3.4MHZ SPI:同步串行全双工 最高20MHZ
同步通信:通信设备之间共用同一条时钟线,通信双方通信速度由时钟线决定。 异步通信:通信双方不共用同一条时钟线,速度有自己决定(通信双方需要保持一致)。
串行通信:通信双方只有一条数据。 并行通信:通信双方可以有多条数据线,通信速度更快,但是数据线越多占用硬件资源越多 成本越高。
全双工通信:任意时刻,通信双方可以发送与接收数据。 双线单向 半双工通信:同一个时刻,只能由一方发送,另外一方只可以接收。 单线双向 如:对讲机。 单工通信:通信双方只可以由一方发送数据,另一方只可以接收数据。单线单向 如:收音机
串口四要素:波特率,数据位,停止位,奇偶校验位(校验准确率很低50%以下,一般选择禁止)
一、串口1配置
二、代码编写
#include "usart1.h"
#include "sys.h"
void Usart1_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_Init( USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
USART_ITConfig(USART1,USART_IT_RXNE, ENABLE);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_Init(&NVIC_InitStructure);
}
void USART1_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
res = USART_ReceiveData( USART1);
USART_SendData(USART1, res);
}
}
演示
|