金牌会员
 
- 积分
- 1077
- 金钱
- 1077
- 注册时间
- 2017-9-11
- 在线时间
- 105 小时
|
20金钱
我是想使用定时器timer3设置20ms中断,每次串口中断接收到1字节数据就存到数组并刷新timer3,timer3定时时间到时提取数组。
但不知道为什么每次上电后的接收的第一组字符串""TEST"只存了1个字节'T',第二组以后就都收全了,请问如何解决第一组数据的问题?
//全局变量
uint8_t PC_RX_BUF[100]; // 上位机串口接收缓冲
uint16_t PC_RX_CNT; // 上位机串口接收计数
uint8_t Res; // 串口接收中断缓存1字节
//main.c主程序
PC_RX_CNT = 0;
HAL_UART_Receive_IT(&huart2, &Res, 1); // 开启接收中断
//中断程序
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) //串口中断
{
if (huart == (&huart2))
{
PC_RX_BUF[PC_RX_CNT] = Res;
PC_RX_CNT++;
if (PC_RX_CNT > 99)
{
PC_RX_CNT = 0;
}
// 定时器3周期20ms
HAL_TIM_Base_Stop_IT(&htim3);
HAL_TIM_Base_Start_IT(&htim3); // 使能定时器3和定时器3更新中断:TIM_IT_UPDATE
HAL_UART_Receive_IT(&huart2, &Res, 1); // 开启接收中断
}
}void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) //定时器中断
{
if (htim == (&htim3))
{
HAL_TIM_Base_Stop_IT(&htim3);
if ((PC_RX_CNT > 1)&&(PC_RX_BUF[0]=='T'))// PC上位机串口
{
HAL_UART_Transmit(&huart2, (uint8_t *)PC_RX_BUF, PC_RX_CNT, 1000); // 返回收到的数据
}
PC_RX_CNT = 0;
}
}
cubemx设置
|
|