测试开发板:正点原子STM32F407最小系统板子 软件:CubeMx keil
- 本例程针对CubeMx LL库使用过程串口接收数据丢包的问题进行测试;
- 关于CubeMx的配置,相信大家都基本会,网上好多教程配置一下串口就行(配置一个LED,一个USART(这里是USART1),这里注意的是需要配置串口中断,本例程通过中断来实现)。
代码部分: 1>串口发送一帧数据: 主函数
LL_USART_EnableIT_PE(USART1);
LL_USART_EnableIT_RXNE(USART1);
LL_USART_EnableIT_ERROR(USART1);
while (1)
{
LL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
LL_mDelay(500);
}
串口发送数据函数(可以自定义c文件):
void USART1_Tx(uint8_t *data,uint8_t len)
{
int i;
for(i=0;i<len;i++)
{
while(!LL_USART_IsActiveFlag_TXE(USART1));
LL_USART_TransmitData8(USART1,data[i]);
while(!LL_USART_IsActiveFlag_TC(USART1));
}
}
2> stm32f4xx_it.c文件中找到
void USART1_IRQHandler(void)
定义变量,本次测试用5个字节的数据作为一帧数据进行测试,读者可自行修改
uint8_t Rx_buff[5];
在中断函数里面(注释掉的是单个字节的程序,测试可行):
void USART1_IRQHandler(void)
{
static uint8_t RxCounter=0;
if(LL_USART_IsActiveFlag_RXNE(USART1))
{
Rx_buff[RxCounter++]=LL_USART_ReceiveData8(USART1);
if(RxCounter>=5)
{
USART1_Tx(Rx_buff,5);
RxCounter=0;
}
LL_USART_ClearFlag_ORE(USART1);
}
}
3>测试结果 可以通过串口助手发送数据,然后接收数据,看看发送和接收的数据字节数(上传不了测试后的图片,只能文字了)
|