| 
 
| 思路:我写的是利用DMA将内存的数据送到串口3上,在中断里写清除的标志位! 现象:在所有的数据都搬运完毕后,才打印剩余量!
 代码:
 ***********************************************************************************************************
 int main(void)
 {
 int pro=0;
 int i=0;
 BSP_Init();
 delay_init();
 for(i=0;i<8000;i++)
 Buffer=i;
 USART_OUT(USART3,"****  F407_USART_DMA  ****\r\n");              //向串口1发送开机字符
 USART_DMACmd(USART3, USART_DMAReq_Tx, ENABLE);/*使能 USART3的发送数据DMA请求 至此USART3与DMA开始工作*/
 GPIO_SetBits(GPIOB,GPIO_Pin_11);
 while(1)
 {
 /*因为 DMA 工作是独立于 CPU 之外的,所以在 DMA 工作的同时 CPU 可以做其他事
 我们等到 DMA 传输完毕后产生一个状态指示,即点亮一个 LED */
 delay_ms(1000);
 pro=DMA_GetCurrDataCounter(DMA1_Stream3);
 USART_OUT(USART3, "剩余传送量=%d\r\n",pro);
 
 /*DMA 传输完毕后会自动关闭通道,数据就打印不出来了!
 而且还得开启DMA的接收完成中断服务函数*/
 }
 }
 ***********************************************************************************************************
 void DMA1_Stream3_IRQHandler(void)
 {
 if (DMA_GetITStatus(DMA1_Stream3, DMA_IT_TCIF3) != RESET)  //判断传输完成后,标志位置1
 {
 DMA_ClearITPendingBit(DMA1_Stream3, DMA_IT_TCIF3);//清除通道3传输完成标志
 DMA_Cmd(DMA1_Stream3, DISABLE);
 GPIO_ResetBits(GPIOB,GPIO_Pin_11);
 USART_OUT(USART3,"\r\n        ****DMA传输完毕_中断*******        \r\n");
 }
 }
 ***********************************************************************************************************
 
 
 
 
 
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册 
  |