OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4648|回复: 5

DMA中断的问题 求帮忙看下这个程序哪设置错了

[复制链接]

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2013-11-7
在线时间
0 小时
发表于 2013-11-27 21:48:48 | 显示全部楼层 |阅读模式
dma.c里面的程序如下:
#include "dma.h"
#include "delay.h"
#include "led.h"
#include <stm32f10x_map.h>
u16 DMA1_MEM_LEN;
u8 abc=0;

void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
RCC->AHBENR|=1<<0; //开启DMA1时钟
delay_ms(5); //等待DMA时钟稳定
DMA_CHx->CPAR=cpar; //DMA1 外设地址 
DMA_CHx->CMAR=(u32)cmar; //DMA1,存储器地址
DMA1_MEM_LEN=cndtr;       //保存DMA传输数据量
DMA_CHx->CNDTR=cndtr;     //DMA1,传输数据量
DMA_CHx->CCR=0X00000000; //复位
DMA_CHx->CCR|=1<<4;   //从存储器读
DMA_CHx->CCR|=0<<5;   //普通模式
DMA_CHx->CCR|=0<<6; //外设地址非增量模式
DMA_CHx->CCR|=1<<7; //存储器增量模式
DMA_CHx->CCR|=0<<8; //外设数据宽度为8位
DMA_CHx->CCR|=0<<10; //存储器数据宽度8位
DMA_CHx->CCR|=1<<12; //中等优先级
DMA_CHx->CCR|=0<<14; //非存储器到存储器模式
  
 
//DMA_CHx->CCR&=~(7<<1);
DMA_CHx->CCR|=1<<1;
MY_NVIC_Init(2,2,DMA1_Channel4_IRQChannel,2);


void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
{
DMA_CHx->CCR&=~(1<<0);       //关闭DMA传输 
DMA_CHx->CNDTR=DMA1_MEM_LEN; //DMA1,传输数据量 
DMA_CHx->CCR|=1<<0;          //开启DMA传输
}  


void DMAChannel4_IRQHandler(void) //??
{
// DMA_Channel_TypeDef *DMA_CHx;
//    
//  DMA_CHx=DMA1_Channel4;
//  if(DMA1->ISR&1<<13)
//  {
//   
//   DMA_CHx->CCR&=~(1<<0);
//   DMA_CHx->CNDTR=DMA1_MEM_LEN;
//   DMA_CHx->CCR|=1<<0;
//  }
LED1=0;
 abc=1;
 DMA1->IFCR|=1<<13;   
}




主函数就是那个例程里面的:


int main(void)
{

u16 i;
u8 t=0;
u8 j,mask=0;
float pro=0;//
   
  Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,9600); //串口初始化为9600
delay_init(72);   //延时初始化 
  KEY_Init();
LED_Init();   //初始化与LED连接的硬件接口
  LCD_Init();
//WKUP_Init();
POINT_COLOR=BLUE;
  usmart_dev.init(72);
TIM3_Int_Init(1,7199);
font_init();
//Adc_Init();
  RTC_Init();
MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)SendBuff,5168);
POINT_COLOR=RED;//设置字体为红色 
BACK_COLOR=BLACK;
LCD_ShowString(60,50,200,16,16,"WarShip STM32");
LCD_ShowString(60,70,200,16,16,"DMA TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"2012/9/8");
  LCD_ShowString(60,130,200,16,16,"KEY0:Start");
j=sizeof(TEXT_TO_SEND);   
for(i=0;i<5168;i++)//填充ASCII字符集数据
    {
if(t>=j)//加入换行符
{
if(mask)
{
SendBuff=0x0a;
t=0;
}else 
{
SendBuff=0x0d;
mask++;
}
}else//复制TEXT_TO_SEND语句
{
mask=0;
SendBuff=TEXT_TO_SEND[t];
t++;
}     
    }  
POINT_COLOR=BLUE;//设置字体为蓝色  
i=0;
while(1)
{
t=KEY_Scan(0);
if(t==KEY_RIGHT)//KEY0按下
{
LCD_ShowString(60,150,200,16,16,"Start Transimit....");
LCD_ShowString(60,170,200,16,16,"   %");//显示百分号
printf("\r\nDMA DATA:\r\n");    
   USART1->CR3=1<<7;           //使能串口1的DMA发送       
MYDMA_Enable(DMA1_Channel4);//开始一次DMA传输!    
   while(abc==0)
   {  
  pro=DMA1_Channel4->CNDTR;//得到当前还剩余多少个数据
  pro=1-pro/5168;//得到百分比  
pro*=100;      //扩大100倍
LCD_ShowNum(60,170,pro,3,16);  
   }    
LCD_ShowNum(60,170,100,3,16);//显示100%  
LCD_ShowString(60,150,200,16,16,"Transimit Finished!");//提示传送完成
}
i++;
delay_ms(10);
if(i==20)
{
LED0=!LED0;//提示系统正在运行
i=0;
}   
}
}



现象就是百分比不断变化 最后卡在99%不动了,LED1也没亮,感觉好像DMA中断没进入,调了半天没调出来,蛋疼了,









正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2013-11-7
在线时间
0 小时
 楼主| 发表于 2013-11-27 22:14:42 | 显示全部楼层
我靠问题解决了 看的这个帖子   http://www.openedv.com/posts/list/0/9059.htm#142589
启动文件里面没有void DMAChannel4_IRQHandler(void)这个函数 ,只有void  DMA1_Channel4_IRQHandler(void)
回复 支持 反对

使用道具 举报

23

主题

292

帖子

0

精华

高级会员

Rank: 4

积分
501
金钱
501
注册时间
2013-9-17
在线时间
17 小时
发表于 2014-1-3 00:11:25 | 显示全部楼层
你 是 黑 科比的 嘛
闷鱼闷闷不乐吃焖鱼
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-3 11:24:13 | 显示全部楼层
恭喜楼主
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-1-4 00:29:59 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-1-4 00:36:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-12 17:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表