你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 12116|回复: 7

stm32 Usart DMA中断,无法进去DMA中断函数,求解?? 【悬赏问答】

[复制链接]

1

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-11-9 11:02:30 | 显示全部楼层 |阅读模式
使用usart2, 对应的DMA中断是RX_DMA DMA1_CHN6,TX_DMA DMA1_CHN7
现在的问题是,数据的收发都是可以的,通过DMA的BUF和电脑的串口调试工具连接,能够正常收发。
但是,始终无法进去中断处理函数(DMA1_Channel6_IRQHandler, DMA1_Channel7_IRQHandler)。
求高手指点,我现在用的库是V3.5????
 
附主要代码:
//-----------初始化
UsartApiConfigRCC();
    UsartApiConfigNVIC();
    UsartApiConfigGPIO();
    UsartApiConfigDMA();
    UsartApiConfigInit();
    /* Enable USARTy DMA TX request */
  USART_DMACmd(USARTz, USART_DMAReq_Tx, ENABLE);
  /* Enable USARTz DMA TX request */
  USART_DMACmd(USARTz, USART_DMAReq_Rx, ENABLE);
  
  /* Enable USARTy */
  USART_Cmd(USARTz, ENABLE);
  /* Enable USARTy DMA TX Channel */
  DMA_Cmd(DMA_CHN_RX, ENABLE);
 
static void UsartApiConfigNVIC()
{
    NVIC_InitTypeDef NVIC_InitStructure;
    /* Configure the NVIC Preemption Priority Bits */ 
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    /* Enable the USARTy Interrupt */
    NVIC_InitStructure.NVIC_IRQChannel = USARTy_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    /* Enable the USARTz Interrupt */
    NVIC_InitStructure.NVIC_IRQChannel = USARTz_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel6_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel7_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
   
}
static void UsartApiConfigDMA()
{
   
    DMA_InitTypeDef DMA_InitStructure;
   
    //DMA_InitTypeDef DMA_InitStructure;
    /* USARTz_Tx_DMA_Channel (triggered by USARTz Tx event) Config */
    DMA_DeInit(DMA_CHN_RX);
    DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&USARTz->DR;//USARTz_DR_Base;
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)g_sDmaRxBuf;
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//接受方向
    DMA_InitStructure.DMA_BufferSize = sizeof(g_sDmaRxBuf);
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
    DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  
    DMA_Init(DMA_CHN_RX, &DMA_InitStructure);
    DMA_ITConfig(DMA_CHN_RX, DMA_IT_TC, ENABLE);
}
 
//-------------中断函数
void DMA1_Channel6_IRQHandler(void)// DMA Rx Interrupt (Usart2)
{
    STM_EVAL_LEDToggle(LED2);
}

void DMA1_Channel7_IRQHandler(void)// DMA Tx Interrupt (Usart2)
{
    g_iUsartSendFlag = E_FLAG_OFF;
    DMA_Cmd(DMA_CHN_TX, DISABLE);
    UsartJudgeDataToSend();
}
//----------STARTup
                DCD     DMA1_Channel1_IRQHandler  ; DMA1 Channel 1
                DCD     DMA1_Channel2_IRQHandler  ; DMA1 Channel 2
                DCD     DMA1_Channel3_IRQHandler  ; DMA1 Channel 3
                DCD     DMA1_Channel4_IRQHandler  ; DMA1 Channel 4
                DCD     DMA1_Channel5_IRQHandler  ; DMA1 Channel 5
                DCD     DMA1_Channel6_IRQHandler  ; DMA1 Channel 6
                DCD     DMA1_Channel7_IRQHandler  ; DMA1 Channel 7

 
 
 
 
 
 
 
回复

使用道具 举报

1

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-11-9 11:34:56 | 显示全部楼层

回复:stm32 Usart DMA中断,无法进去DMA中断函数,求解???

有大侠,指点一下吗?
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2012-11-9 16:00:27 | 显示全部楼层

回复:stm32 Usart DMA中断,无法进去DMA中断函数,求解???

我刚才测试官方例程是可以的,你可以参考一下:
 

DMA_Interrupt.rar

下载

15.31 KB, 下载次数: 562

回复 支持 反对

使用道具 举报

25

主题

446

回帖

0

蝴蝶豆

中级会员

最后登录
2019-12-10
发表于 2012-11-9 21:22:57 | 显示全部楼层

RE:stm32 Usart DMA中断,无法进去DMA中断函数,求解?? 【悬赏问答】

用官方的例程改吧,我一般先用官方的例程跑一遍,再慢慢改,最后就一定成功了,哈哈
回复 支持 反对

使用道具 举报

24

主题

591

回帖

0

蝴蝶豆

中级会员

最后登录
2020-12-2
发表于 2012-11-9 22:52:53 | 显示全部楼层

RE:stm32 Usart DMA中断,无法进去DMA中断函数,求解?? 【悬赏问答】

还是DMA得中断没有设置好。你看看例程。
回复 支持 反对

使用道具 举报

8

主题

206

回帖

0

蝴蝶豆

中级会员

最后登录
2019-10-23
发表于 2012-11-11 23:25:59 | 显示全部楼层

回复:stm32 Usart DMA中断,无法进去DMA中断函数,求解?? 【悬赏问答】

 那是因为 你只是 使能了 DMA   你还没有 进行DMA  中断的相关 配置啊 
怎么会进中断呢    楼主 要配置 下面 这个函数 就会进中断了
void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
  assert_param(IS_DMA_CONFIG_IT(DMA_IT));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable the selected DMA interrupts */
    DMAy_Channelx->CCR |= DMA_IT;
  }
  else
  {
    /* Disable the selected DMA interrupts */
    DMAy_Channelx->CCR &= ~DMA_IT;
  }
}
 
回复 支持 反对

使用道具 举报

0

主题

10

回帖

0

蝴蝶豆

初级会员

最后登录
2020-11-21
发表于 2013-1-24 14:40:55 | 显示全部楼层

回复:stm32 Usart DMA中断,无法进去DMA中断函数,求解?? 【悬赏问答】

回复第 3 楼 于2012-11-09 16:00:27发表:
我刚才测试官方例程是可以的,你可以参考一下:
 
 

!~~~~
回复 支持 反对

使用道具 举报

0

主题

10

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2014-7-15 14:46:56 | 显示全部楼层

回复:stm32 Usart DMA中断,无法进去DMA中断函数,求解?? 【悬赏问答】

回复第 3 楼 于2012-11-09 16:00:27发表:
我刚才测试官方例程是可以的,你可以参考一下:
 &************
 
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版