初级会员

- 积分
- 194
- 金钱
- 194
- 注册时间
- 2020-1-27
- 在线时间
- 19 小时
|
1金钱
代码如下:
[code=c]void USART1_IRQHandler(void)
{
if(USART1->ISR &= USART_ISR_IDLE)
{
/* Receive Data */ // 这一句是从F4称过来的,不起作用
vu16 a = (uint16_t)(USART1->RDR & (uint16_t)0x01FF);
USART1->ICR |= USART_ICR_IDLECF; // 清除中断
u16 len = BUFSIZE - DMA2_Stream6->NDTR; //获得接收到的字节数
DMA2_Stream6->CR &= ~(1<<0); //关闭DMA传输
while( DMA2_Stream6->CR & 0X1 ); //确保DMA可以被设置
DMA2_Stream6->NDTR = m_nLen; //DMA 存储器0地址
DMA2_Stream6->CR |= 1<<0; //开启DMA传输
}
}
[/code]
H743利用空闲中断接收数据,启动后能收到一条不全的数据,之后每次中断,len都是0,收不到任何信息。
对比了一下F1和F4的程序,有一句
USART_ReceiveData(USART6); // Clear IDLE interrupt flag bit
我查了一下,只有一行有效语句
return (uint16_t)(USART1->RDR & (uint16_t)0x01FF);
我把这一句加到中断过程的第一行,没有作用
请高手看看,或给一段正确的代码(寄存器版本),不胜感激。
|
最佳答案
查看完整内容[请看2#楼]
参考帖子:
http://www.openedv.com/forum.php?mod=viewthread&tid=293299
|