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

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

[复制链接]
Hust-400285 提问时间:2012-11-9 11:02 /
使用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

 
 
 
 
 
 
 
收藏 评论7 发布时间:2012-11-9 11:02

举报

7个回答
Hust-400285 回答时间:2012-11-9 11:34:56

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

有大侠,指点一下吗?
废鱼 回答时间:2012-11-9 16:00:27

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

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

DMA_Interrupt.rar

下载

15.31 KB, 下载次数: 582

xiaodc88 回答时间:2012-11-9 21:22:57

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

用官方的例程改吧,我一般先用官方的例程跑一遍,再慢慢改,最后就一定成功了,哈哈
zykzyk-93033 回答时间:2012-11-9 22:52:53

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

还是DMA得中断没有设置好。你看看例程。
xieyuanfu 回答时间: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;
  }
}
 
aw76 回答时间:2013-1-24 14:40:55

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

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

!~~~~
Volcanoscar 回答时间:2014-7-15 14:46:56

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

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

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版