stm32 usart 串口
比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps)。如每秒钟传送240个字符, 而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的比特率为:
- 10位 × 240个/秒 = 2400bps
USART 串口通信配置步骤
1.使能串口时钟
2.使能GPIO端口时钟
3.GPIO端口模式设置
4.初始化串口参数,波特率、 数据位、 停止位,校验位等
5.使能串口
6.设置串口中断类型并使能
7.初始化NVIC外设,设置串口中断优先级
8.编写串口中断处理函数
举例
void USART1_IRQHandler() //中断处理函数
{
u8 r;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清中断
r = USART_ReceiveData(USART1);
USART_SendData(USART1, r);
//while(USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);
//USART_ClearFlag(USART1, USART_FLAG_TC);
}
}
void uart1_init()
{
GPIO_InitTypeDef gpio9 =
{
GPIO_Pin_9, //TX
GPIO_Speed_50MHz,
GPIO_Mode_AF_PP //复用推挽输出
};
GPIO_InitTypeDef gpio10 =
{
GPIO_Pin_10, //RX
GPIO_Speed_50MHz,
GPIO_Mode_IN_FLOATING //浮空
};
USART_InitTypeDef usart =
{
9600,
USART_WordLength_8b,
USART_StopBits_1,
USART_Parity_No,
USART_Mode_Rx | USART_Mode_Tx,
USART_HardwareFlowControl_None, //硬件流控制
};
NVIC_InitTypeDef nvic =
{
USART1_IRQn,
2,
2,
ENABLE
};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //使能串口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIO端口时钟
GPIO_Init(GPIOA, &gpio9); //GPIO端口模式设置
GPIO_Init(GPIOA, &gpio10);
USART_Init(USART1, &usart); //初始化串口
USART_ClearFlag(USART1, USART_FLAG_TC);
USART_Cmd(USART1, ENABLE); //使能串口
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //设置串口中断类型并使能(接收中断)
NVIC_Init(&nvic); //初始化NVIC
}
注:USART_GetITStatus与USART_GetFlagStatus功能类似,区别是USART_GetITStatus函数会先判断是否使能串口中断,使能后才读取状态标志,而USART_GetFlagStatus函数直接读取状态标志