结果就是void USART1_IRQHandler(void)正常 可以进来
{
// unsigned char num=0;
// if(USART_GetiTStatus(USART1,USART_IT_IDLE) == SET)
// {
// num = USART1->SR;
// num = USART1->DR; //清USART_IT_IDLE标志
// DMA_Cmd(DMA1_Channel5,DISABLE); //关闭DMA
// num = 128 - DMA_GetCurrDataCounter(DMA1_Channel5); //得到真正接收数据个数
// receive_data[num] = ' ';
// DMA1_Channel5->CNDTR=128; //重新设置接收数据个数 DMA_Cmd(DMA1_Channel5,ENABLE); //开启DMA
// // receive_flag = 1; //接收数据标志位置1
// DMA_Cmd(DMA1_Channel5,ENABLE); //开启DMA
// printf("%s ",receive_data );
// }
}
void DMAChannel5_IRQHandler(void)
{
if(DMA_GetITStatus(DMA1_IT_TC5) != RESET)
{
TestLive();
DMA_ClearITPendingBit(DMA1_IT_TC5);
}
//进不来
}
说明:我百度找了找别人的问题,一种是中断函数名字的问题,我这里不存在这个问题,如图
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
本帖最后由 梁子 于 2018-7-2 16:30 编辑
当波特率确定后,一个字节的接收时间就已经确定了(假设当前波特率下一字节的发送时间为1ms),假设串口一直在接收数据,突然有1ms空闲下来,没有数据可接收了,这时CPU就可以提出串口空闲中断了;原理就是这样。DMA是自动搬运工,当有匹配数据时,它自然会去搬。
一周热门 更多>