**开发平台** :
正点原子 探索者STM32F407ZET6
cube mx:V 5.1.0
keil uVision5
注意:
本教程默认读者已经对stm32和cubemx软件有一定了解;
为节省篇幅,详细配置cubemx的步骤仅在第一篇中说明,以后仅会简略介绍配置相关内容。
STM32LL库系列教程(三)——串口中断
实验目的:
实验现象:初始化完成,串口打印OK;
随后,发送10个字符,LED翻转,且串口打印 I get + 10个字符
1. 配置cubemx
1.1 配置LED
板载的LED是PF9,PF10引脚,配置为Output即可
1.2 配置串口
配置串口1异步通信
开串口中断
2.编写代码
2.1 usart.c
添加如下代码
/* USER CODE BEGIN 1 */
void USART_Print(unsigned char *Send_Text,uint32_t Size_Text)
{
uint32_t index = 0;
for (index = 0; index < Size_Text; index++)
{
while (!LL_USART_IsActiveFlag_TXE(USART1)); //USART数据发送有两个标志,一个是TXE=1,发送缓冲区空标志:说明可以往数据寄存器写入数据了,但并不代码数据发送完成了
LL_USART_TransmitData8(USART1,Send_Text[index]);
}
while (!LL_USART_IsActiveFlag_TC(USART1)); //另一个是TC=1发送结束。
}
void USART1_Reception_Callback(void)
{
RxBuff[i++]= LL_USART_ReceiveData8(USART1);//接收数据
if(i==10)
{
i=0;
flag=1;
LL_GPIO_TogglePin(GPIOF,LL_GPIO_PIN_9);
}
}
/* USER CODE END 1 */
2.2 main.c
开串口中断
2.3 stm32f4xx_it.c
添加中断服务函数
3.实验现象
4. 相关寄存器介绍
从main.c 开始 关于串口,我们调用了如下LL库的函数
LL_USART_EnableIT_RXNE(USART1); //串口1接收RXNE位中断使能
while (!LL_USART_IsActiveFlag_TXE(USART1));
/*SART数据发送有两个标志,一个是TXE=1,发送缓冲区空标志:
说明可以往数据寄存器写入数据了,但并不代码数据发送完成了*/
LL_USART_TransmitData8(USART1,Send_Text[index]);
while (!LL_USART_IsActiveFlag_TC(USART1)); //另一个是TC=1发送结束
RxBuff[i++]= LL_USART_ReceiveData8(USART1);//接收数据
以上可见,串口的发送和中断接收所调用的函数。但对LL库来说,其实一个函数只是对寄存器的一次读或者写,所以串口这块也并不是很复杂,但要弄懂就必须要知道串口接收与发送的实际过程。