本篇是上一篇的一个plus,也是个人对串口中断接收的一个探索。
STM32_串口接收中断_实现定长数据接收(1)_heqiunong的博客-CSDN博客
上一篇讲到,用串口接收中断来实现串口接收的功能,其中有个要点,就是它是一个字节一个字节的接收的。
而本篇尝试 16个字节 16个字节的接收。用的是同样的方法,代码只需稍微的修改。
同样,还是修改两处代码。
第一处:main.c
MX_GPIO_Init();
MX_DMA_Init();
MX_USART1_UART_Init();
MX_TIM3_Init();
MX_TIM2_Init();
HAL_TIM_Base_Start_IT(&htim3);
userinit();
HAL_UART_Receive_IT(&huart1,value,16); // ▲ 此处修改
while (1)
{
usermain();
}
第二处:"AngelaDecode.c" // 此文件专门用于接收并处理上位机数据, 你可自己定义串口接收源文件a.c b.c,随便你。 你写在main.c里面也可以。 好好看注释就行,我不必多说。
代码中修改的部分,已用注释标明。
#include "usart.h"
#include "AngelaDecode.h"
unsigned char value[16] = {0x00}; // ▲ value变成了16字节的数组
unsigned char AngelaRx[128]={0x00};
short AngelaRxCNT = 0;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
int i;
if(huart->Instance==USART1) {
// ▲ 此处修改, 一次往AngelaRx数组拷贝16个字节
for( i = 0; i < 16; i++){
AngelaRx[AngelaRxCNT+i] = value[i];
}
AngelaRxCNT = AngelaRxCNT + 16;
HAL_UART_Receive_IT(&huart1, value, 16); // ▲ 此处修改
if(AngelaRxCNT==128){
AngelaCmdDecode();
AngelaRxCNT = 0;
}
}
}



