本帖最后由 hpdell 于 2012-12-14 10:13 编辑
参考stm32f1xx的帖子修改而来,望多多指教
在此感谢感谢!!!11
http://www.amobbs.com/forum.php? ... C%E5%8F%91%E9%80%81
顺便请教下,我想用DMA发送一个字符或者多个字符时,调试没有成功,请大仙们指点指点一下!
此工程文件不含固件库,使用者需要自己增加固件库,固件库与本工程文件放同一目录就可以了,路径请自行修改!!
//USART1使用DMA接收数据中断服务程序, DMA接收完成中断
void DMA2_Stream5_IRQHandler(void)
{
/* Test on DMA Stream Transfer Complete interrupt */
if(DMA_GetITStatus(DMA2_Stream5, DMA_IT_TCIF5)) //此处是我增加,不然单片机会不停的发送数据给pc机
{
DMA_ClearITPendingBit(DMA2_Stream5,DMA_IT_TCIF5);
DMA_ClearITPendingBit(DMA2_Stream5,DMA_IT_TEIF5);
DMA_Cmd(DMA2_Stream5, DISABLE); //关闭DMA,防止处理其间有数据
DMA2_Stream5->NDTR = RECAVEMAXCOUNT; //重装填
DMA_Cmd(DMA2_Stream5, ENABLE); //处理完,重开DMA
}
}
//USART1使用DMA发数据中断服务程序
void DMA2_Stream7_IRQHandler(void)
{
if(DMA_GetITStatus(DMA2_Stream7, DMA_IT_TCIF7) != RESET)
{
DMA_ClearITPendingBit(DMA2_Stream7,DMA_IT_TCIF7);
DMA_ClearITPendingBit(DMA2_Stream7,DMA_IT_TEIF7);
USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
DMA_Cmd(DMA2_Stream7, DISABLE); //关闭DMA
USART1_TxFinish = 1; //置DMA传输完成
}
}
工程文件:
V26-DMA2_Stream5.zip
(76.78 KB, 下载次数: 151)
2012-12-14 10:04 上传
点击文件名下载附件
你都不知道你接收的数据长度是多少,怎么用DMA完成中断?DMA是完成你设定数量的传输之后触发传输完成中断的。
用总线空闲中断+DMA,DMA缓冲区长度设置成大于最大接收数据长度,单片机接收完一帧数据后,总线恢复空闲状态,进入空闲中断,读DMA剩余传输数量可以获得接收数据的长度。这样接收到一帧数据,单片机只中断了一次,而且是实时响应的。
我看你的程序里面用的是DMA传输完成,你如何保证你的实时性?
一周热门 更多>