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

查看: 12045|回复: 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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版