[STM32F1] UART4用DMA2传递数据,DMA2进不了中断

[复制链接]
 楼主| taly_yang 发表于 2014-1-17 23:50 | 显示全部楼层 |阅读模式
本帖最后由 taly_yang 于 2014-1-18 12:12 编辑

请大虾帮忙看看,问题出在哪,谢谢
1,MCU是STM32F107
2,UART4发送完了一帧数据后,不能进入DMA2中断程序,但是中断请求标志有置起(TCIF5)
3,调试时观察各个相关配置的标志位都有置起(DMA2--->TCIE, EN ;UART4--->TE ,DMAT ;)
4,全局中断都有打开(相关标志位也有被置起 SETENA59 ,CLREN59,)

  和 网上一个兄弟同样的问题,但是没看到相关的解决办法。

下面是配置代码:



  1. /******************************************************

  2. *******************************************************/
  3. void Uart4Init(void){//


  4. USART_InitTypeDef USART_InitStructure;
  5. USART_ClockInitTypeDef USART_ClockInitStruct;
  6. DMA_InitTypeDef DMA_InitStructure;
  7. NVIC_InitTypeDef NVIC_InitStructure;

  8. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);//使能DMA时钟
  9. RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4 , ENABLE); //使能串口时钟

  10. // *****************************************
  11. NVIC_InitStructure.NVIC_IRQChannel = DMA2_Channel4_5_IRQn;//; DMA2_Channel5_IRQn
  12. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NVIC_PriorityGroup_4;
  13. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  14. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  15. NVIC_Init(&NVIC_InitStructure);

  16. /* UART4 configured as follow:*/


  17. USART_InitStructure.USART_BaudRate = 115200;
  18. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  19. USART_InitStructure.USART_StopBits = USART_StopBits_2;
  20. USART_InitStructure.USART_Parity = USART_Parity_No ;
  21. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  22. USART_InitStructure.USART_Mode = USART_Mode_Tx;//USART_Mode_Tx|USART_Mode_Rx;
  23. USART_ClockInitStruct.USART_Clock = USART_Clock_Disable;
  24. USART_ClockInitStruct.USART_CPOL = USART_CPOL_Low;
  25. USART_ClockInitStruct.USART_CPHA = USART_CPHA_2Edge;
  26. USART_ClockInitStruct.USART_LastBit = USART_LastBit_Disable;

  27. USART_Init(UART4, &USART_InitStructure);


  28. USART_ITConfig(UART4, USART_IT_TXE, DISABLE);
  29. //--------
  30. USART_DMACmd(UART4,USART_DMAReq_Tx,ENABLE);

  31. //-----------------


  32. /* DMA channel1 configuration ----------------------------------------------*/
  33. //DMA_DeInit(DMA2_Channel5);
  34. DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&UART4->DR); //外设地址
  35. DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&artnet_dmxUniverse[send_buffer[3]-1];//内存地址
  36. DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;//DMA_DIR_PeripheralSRC;//DMA 传输方向
  37. DMA_InitStructure.DMA_BufferSize = 100;
  38. DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  39. DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  40. DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
  41. DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
  42. DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular; :设置DMA的传输模式:连续不断的循环模式. DMA_Mode_Normal:这里是普通模式,即传输完成后就关闭了DMA
  43. DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  44. DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  45. DMA_Init(DMA2_Channel5, &DMA_InitStructure);


  46. DMA_ITConfig(DMA2_Channel5, DMA_IT_TC, ENABLE); //使能DMA 中断
  47. USART_Cmd(UART4, ENABLE); // Enable USART1
  48. DMA_Cmd(DMA2_Channel5, ENABLE); //使能通道1

  49. }


  50. /******************************************************

  51. *******************************************************/


  52. void DMA2_Channel4_5_IRQHandler(void)

  53. {
  54. /* Test on DMA Channel1 Transfer Complete interrupt */
  55. if(DMA_GetITStatus(DMA2_IT_TC5))
  56. {

  57. DMA_ClearITPendingBit(DMA2_IT_GL5);


  58. USART_DMACmd(UART4,USART_DMAReq_Tx,DISABLE);
  59. USART_ITConfig(UART4, USART_IT_TXE, DISABLE);


  60. DMA_ITConfig(DMA2_Channel5, DMA_IT_TC, DISABLE); //
  61. DMA_Cmd(DMA2_Channel5, DISABLE); //

  62. TxState = STOPED;
  63. }

 楼主| taly_yang 发表于 2014-1-18 12:10 | 显示全部楼层
airwill 发表于 2014-1-18 15:54 | 显示全部楼层
不知道有没有做 IO 口的设置?
 楼主| taly_yang 发表于 2014-1-18 18:39 | 显示全部楼层
IO口有做设置,且串口都有发出数据,就是发送完一串数据后没有进入中断函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

2

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部