中级会员
 
- 积分
- 241
- 金钱
- 241
- 注册时间
- 2016-2-2
- 在线时间
- 80 小时
|
发表于 2017-12-22 21:45:12
|
显示全部楼层
原子哥我在这例程里面遇到两个问题想请教一下。
第一个问题是在这个中断函数中 if(m_ctrl_dev.rxlen>(M_MAX_FRAME_LENGTH-1))m_ctrl_dev.rxlen=0; 为什么要选择减1?我用串口调试的时候每次发送一个数据rxlen就会加1代表了发送数据的个数,而M_MAX_FRAME_LENGTH是数据帧最大的个数261,应该不需要减1不是吗?
void USART2_IRQHandler(void)
{
u8 res;
if(USART2->SR&(1<<5))
{
res=USART2->DR;
if(m_ctrl_dev.frameok==0)
{
m_ctrl_dev.rxbuf[m_ctrl_dev.rxlen]=res;
m_ctrl_dev.rxlen++;
if(m_ctrl_dev.rxlen>(M_MAX_FRAME_LENGTH-1))m_ctrl_dev.rxlen=0;
}
}else if(USART2->SR&(1<<4))
{
res=USART2->DR;
if(m_ctrl_dev.rxlen>=M_MIN_FRAME_LENGTH)m_ctrl_dev.frameok=1;
else m_ctrl_dev.rxlen=0;
}
}
第二个问题是串口总线空闲中断是什么时候进入的?调试时候断点打在if(USART2->SR&(1<<5))中不会进入空闲中断,打在else if(USART2->SR&(1<<4))中可以进入空闲中断。 |
|