久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 446|回復: 1
收起左側

用STM32F103C6T6控制DMA輸出對應的PWM

[復制鏈接]
ID:217934 發表于 2025-3-7 20:17 | 顯示全部樓層 |閱讀模式
100黑幣
最近在玩WS2812,一直驅動不起來。我用的單片機是F103, ,然后使用的引腳是PB0, 寫得代碼一直輸出不了DMA,希望各位幫忙看一下,哪里配置錯了。

目前的情況就是PWM能夠輸出800khz,想要通過不同的脈沖周期輸出不一樣的占空比。例如圖片處。附上代碼。
  1. //頭文件
  2. #include "stm32f10x.h"
  3. #include "GPIOLIKE51.h"
  4. #include "stm32f10x_dma.h"
  5. #include "stm32f10x_tim.h"

  6. #define BUFFER_SIZE 10
  7. int j,z;
  8. int iii,jjj;

  9. uint32_t pwm_buffer[BUFFER_SIZE] = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90};
  10. //函數聲明
  11. void GPIO_Configuration(void);
  12. void xintiao(void);
  13. //=============================================================================
  14. //文件名稱:Delay
  15. //功能概要:延時
  16. //參數說明:nCount:延時長短
  17. //函數返回:無
  18. //=============================================================================
  19. void TIM3_PWM_Configuration(unsigned int freq, uint8_t duty_cycle);
  20. void DMA_Configuration(uint32_t pwmBuffer1);
  21. void SendData(void);

  22. void Delay(uint32_t nCount)
  23. {
  24.   for(; nCount != 0; nCount--);
  25. }

  26. //=============================================================================
  27. //文件名稱:main
  28. //功能概要:主函數
  29. //參數說明:無
  30. //函數返回:int
  31. //=============================================================================
  32. int main(void)
  33. {

  34.         GPIO_Configuration();

  35. // 配置TIM2通道2為PWM模式,頻率為800kHz
  36.     TIM3_PWM_Configuration(800000, 50);
  37.         DMA_Configuration(*pwm_buffer);
  38.     while (1)
  39.         {
  40.                 ;
  41.           }
  42. }

  43. //=============================================================================
  44. //文件名稱:GPIO_Configuration
  45. //功能概要:GPIO初始化
  46. //參數說明:無
  47. //函數返回:無
  48. //=============================================================================
  49. void GPIO_Configuration(void)
  50. {
  51.   GPIO_InitTypeDef GPIO_InitStructure;
  52.   
  53.   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC , ENABLE);                                                  
  54. //=============================================================================
  55. //LED -> PC13
  56. //=============================================================================                         
  57.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  58.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  59.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  60.   GPIO_Init(GPIOC, &GPIO_InitStructure);
  61.        
  62. }

  63. void TIM3_PWM_Configuration(unsigned int freq, uint8_t duty_cycle)
  64. {
  65.         // 配置TIM3生成PWM信號
  66.     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  67.     TIM_OCInitTypeDef  TIM_OCInitStructure;

  68.         GPIO_InitTypeDef GPIO_InitStructure;
  69.        
  70.     // 使能TIM3時鐘
  71.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  72.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //使能GPIO外設和AFIO復用功能模塊時鐘

  73.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  74.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  75.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  76.     GPIO_Init(GPIOB, &GPIO_InitStructure);
  77.        
  78.     // 計數器模式設置為向上計數模式
  79.     TIM_TimeBaseStructure.TIM_Period = (72000000 / freq) - 1; // 設置自動重裝載值
  80.     TIM_TimeBaseStructure.TIM_Prescaler = 0;                 // 不分頻
  81.     TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  82.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  83.     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  84.     // PWM模式3配置: PWM信號在下一個更新事件后有效
  85.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  86.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  87.     TIM_OCInitStructure.TIM_Pulse = (duty_cycle * (72000000 / freq)) / 100; // 根據占空比計算脈沖寬度
  88.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  89.     TIM_OC3Init(TIM3, &TIM_OCInitStructure);

  90. //    // 使能TIM3主輸出
  91.     TIM_Cmd(TIM3, ENABLE);
  92. }


  93. void DMA_Configuration(uint32_t pwmBuffer1)
  94. {
  95.     DMA_InitTypeDef DMA_InitStructure;

  96.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

  97.     DMA_DeInit(DMA1_Channel2);
  98.     DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&TIM3->CCR3;//外設的基地址(寄存器的地址)
  99.     DMA_InitStructure.DMA_MemoryBaseAddr = pwmBuffer1;                        //內存的基地址(可以是代碼中定義的數組的地址)
  100.     DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;//DMA的數據傳輸方向
  101.     DMA_InitStructure.DMA_BufferSize = BUFFER_SIZE;//外設(內部的FLASH)地址遞增
  102.     DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;// 內存地址遞增
  103.     DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;// 外設數據單位
  104.     DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;// 內存數據單位
  105.     DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//DMA模式,一次或者循環模式
  106.     DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  107.     DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  108.     DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  109.     DMA_Init(DMA1_Channel2, &DMA_InitStructure);

  110.     DMA_ITConfig(DMA1_Channel2, DMA_IT_TC, ENABLE);
  111.     NVIC_EnableIRQ(DMA1_Channel2_IRQn);

  112.     DMA_Cmd(DMA1_Channel2, ENABLE);
  113.     TIM_DMACmd(TIM3, TIM_DMA_Update, ENABLE);
  114.            // 使能TIM3主輸出
  115.     TIM_Cmd(TIM3, ENABLE);
  116. }


  117. void DMA1_Channel2_IRQHandler(void)
  118. {
  119.     if (DMA_GetITStatus(DMA1_IT_TC2))
  120.     {
  121.         DMA_ClearITPendingBit(DMA1_IT_TC2);
  122.         
  123.         // 重新加載DMA緩沖區以重復傳輸
  124.         DMA_SetCurrDataCounter(DMA1_Channel2, BUFFER_SIZE);
  125.         DMA_Cmd(DMA1_Channel2, ENABLE);
  126.     }
  127. }
復制代碼


34d346b9fcf27bd919b3acb9806e406.jpg
回復

使用道具 舉報

ID:446156 發表于 2025-3-8 09:25 | 顯示全部樓層
void DMA_Configuration(uint32_t *pwmBuffer1);

DMA_Configuration(pwm_buffer);

改成這樣
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美激情四射 | 酒色成人网| 日韩成人在线看 | 天天操人人干 | 亚洲人精品午夜 | 在线免费观看视频黄 | 成人在线视频免费看 | 国产高清一区二区三区 | 国产原创在线观看 | 综合一区 | 亚洲精品久久久一区二区三区 | 亚洲色图第一页 | 91免费观看视频 | 日本精品一区二区三区在线观看视频 | 成人福利视频网站 | 欧美在线一二三 | 99伊人网| 免费精品视频 | 国产精品一区二区久久 | 亚洲一区二区三区在线 | 日本久久网站 | 国产精品久久久久久久久久 | www.狠狠干| 国产乱精品一区二区三区 | 亚洲品质自拍视频网站 | 国产视频一区二区 | 日韩欧美在线精品 | 欧美色综合一区二区三区 | 国产第一区二区 | 免费激情 | 天天看天天操 | 日韩av一区二区在线观看 | 国产在线精品一区二区 | 亚洲精品乱码久久久久久按摩观 | www.国产一区 | 一区二区三区欧美 | 成人免费一区二区三区视频网站 | 久久免费大片 | 欧美不卡 | 精品一二区 | 亚洲视频欧美视频 |