当前位置:   article > 正文

STM32——DMA篇

STM32——DMA篇

技术笔记

一、DMA介绍(了解)

二、DMA结构框图介绍(熟悉)

三、DMA相关寄存器介绍(熟悉)

四、DMA相关HAL库驱动介绍(掌握)

五、DMA配置步骤(掌握)

六、编程实战(掌握)

  1. DMA_HandleTypeDef g_dma_handler;
  2. uint8_t src_buf[10] = {0x0a, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09};
  3. uint8_t dest_buf[10] = {0};
  4. /* 内存到内存 DMA传输 */
  5. void dma_init(void)
  6. {
  7. /* 使能DMA1时钟 */
  8. __HAL_RCC_DMA1_CLK_ENABLE();
  9. g_dma_handler.Instance = DMA1_Channel1;
  10. g_dma_handler.Init.Direction = DMA_MEMORY_TO_MEMORY;
  11. /* 与目标地址相关 */
  12. g_dma_handler.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  13. g_dma_handler.Init.MemInc = DMA_MINC_ENABLE;
  14. /* 与源地址相关 */
  15. g_dma_handler.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  16. g_dma_handler.Init.PeriphInc = DMA_PINC_ENABLE;
  17. g_dma_handler.Init.Priority = DMA_PRIORITY_HIGH;
  18. g_dma_handler.Init.Mode = DMA_NORMAL; /* 内存到内存是不支持循环模式 */
  19. HAL_DMA_Init(&g_dma_handler);
  20. HAL_DMA_Start(&g_dma_handler, (uint32_t)src_buf, (uint32_t)dest_buf, 0);
  21. }
  22. void dma_enable_transmit(uint16_t cndtr)
  23. {
  24. __HAL_DMA_DISABLE(&g_dma_handler);
  25. // DMA1_Channel1->CNDTR = cndtr;
  26. g_dma_handler.Instance->CNDTR = cndtr;
  27. __HAL_DMA_ENABLE(&g_dma_handler);
  28. }
  29. int main(void)
  30. {
  31. uint8_t key;
  32. HAL_Init(); /* 初始化HAL库 */
  33. sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
  34. delay_init(72); /* 延时初始化 */
  35. usart_init(115200);
  36. led_init(); /* 初始化LED */
  37. key_init(); /* 初始化按键 */
  38. beep_init(); /* 初始化蜂鸣器 */
  39. LED0(0); /* 先点亮LED0 */
  40. dma_init();
  41. while(1)
  42. {
  43. key = key_scan(0); /* 得到键值 */
  44. if (key == KEY0_PRES)
  45. {
  46. memset(dest_buf, 0, 10);
  47. dma_enable_transmit(10);
  48. while(1)
  49. {
  50. if (__HAL_DMA_GET_FLAG(&g_dma_handler, DMA_FLAG_TC1))
  51. {
  52. __HAL_DMA_CLEAR_FLAG(&g_dma_handler, DMA_FLAG_TC1);
  53. printf("传输完成 \r\n");
  54. break;
  55. }
  56. }
  57. }
  58. LED0_TOGGLE();
  59. delay_ms(200);
  60. }
  61. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/584417
推荐阅读
相关标签
  

闽ICP备14008679号