中级会员
- 积分
- 212
- 金钱
- 212
- 注册时间
- 2021-11-11
- 在线时间
- 41 小时
|
1金钱
本帖最后由 18703609461 于 2023-7-24 13:27 编辑
串口通信接收 DMA,
是在串口的空闲中断中完成,
空闲中断时,数据不已经接收完毕了么?
传输已经完毕了,再DMA , 数据都没有啦,咋转移数据啊?
void USART1_IRQHandler(void)
{
extern short Angle;
int temp;
extern u8 USART_Cache[][30];
if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET) //????(?????????0x0d 0x0a??)
{
DMA_Cmd(DMA2_Stream5, DISABLE);
data = USART1->SR;
data = USART1->DR; // 此处必须读取标志位!!!
//// 自己的处理代码在这里
DMA_ClearFlag(DMA2_Stream5,DMA_FLAG_TCIF5 | DMA_FLAG_FEIF5 | DMA_FLAG_DMEIF5 | DMA_FLAG_TEIF5 | DMA_FLAG_HTIF5);
DMA_SetCurrDataCounter(DMA2_Stream5, RECEIVE_BUF_SIZE);
DMA_Cmd(DMA2_Stream5, ENABLE);
}
USART_ClearITPendingBit(USART1,USART_IT_IDLE);
}
|
最佳答案
查看完整内容[请看2#楼]
DMA初始化的时候会配置外设到内存,内存到外设还是内存到内存,设定好后,硬件会自动把数据按照你设置的方向处理,达到某个条件时触发中断,这个时候再做相应处理,就是这样,网上讲解很多啊。
|