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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 516|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

用STM32F103C6T6控制DMA輸出對應(yīng)的PWM

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:217934 發(fā)表于 2025-3-7 20:17 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
100黑幣
最近在玩WS2812,一直驅(qū)動不起來。我用的單片機是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. //函數(shù)聲明
  11. void GPIO_Configuration(void);
  12. void xintiao(void);
  13. //=============================================================================
  14. //文件名稱:Delay
  15. //功能概要:延時
  16. //參數(shù)說明:nCount:延時長短
  17. //函數(shù)返回:無
  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. //功能概要:主函數(shù)
  29. //參數(shù)說明:無
  30. //函數(shù)返回: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. //參數(shù)說明:無
  47. //函數(shù)返回:無
  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外設(shè)和AFIO復(fù)用功能模塊時鐘

  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.     // 計數(shù)器模式設(shè)置為向上計數(shù)模式
  79.     TIM_TimeBaseStructure.TIM_Period = (72000000 / freq) - 1; // 設(shè)置自動重裝載值
  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; // 根據(jù)占空比計算脈沖寬度
  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;//外設(shè)的基地址(寄存器的地址)
  99.     DMA_InitStructure.DMA_MemoryBaseAddr = pwmBuffer1;                        //內(nèi)存的基地址(可以是代碼中定義的數(shù)組的地址)
  100.     DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;//DMA的數(shù)據(jù)傳輸方向
  101.     DMA_InitStructure.DMA_BufferSize = BUFFER_SIZE;//外設(shè)(內(nèi)部的FLASH)地址遞增
  102.     DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;// 內(nèi)存地址遞增
  103.     DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;// 外設(shè)數(shù)據(jù)單位
  104.     DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;// 內(nèi)存數(shù)據(jù)單位
  105.     DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//DMA模式,一次或者循環(huán)模式
  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緩沖區(qū)以重復(fù)傳輸
  124.         DMA_SetCurrDataCounter(DMA1_Channel2, BUFFER_SIZE);
  125.         DMA_Cmd(DMA1_Channel2, ENABLE);
  126.     }
  127. }
復(fù)制代碼


34d346b9fcf27bd919b3acb9806e406.jpg (103.93 KB, 下載次數(shù): 0)

34d346b9fcf27bd919b3acb9806e406.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:446156 發(fā)表于 2025-3-8 09:25 | 只看該作者
void DMA_Configuration(uint32_t *pwmBuffer1);

DMA_Configuration(pwm_buffer);

改成這樣
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费看91| 久久亚洲一区二区三 | 野狼在线社区2017入口 | 美国一级片在线观看 | 嫩草伊人| 欧美日韩成人影院 | 免费一级做a爰片久久毛片潮喷 | 午夜精品久久久久久久久久久久久 | 国产99视频精品免视看9 | 精品一二三区视频 | 国产精品久久久久久一区二区三区 | 亚洲伊人精品酒店 | 中文字幕在线播放第一页 | 天天干夜夜操 | 一区二区三区在线 | 免费在线看a | 91精品欧美久久久久久久 | 天堂一区二区三区四区 | 久久久精品天堂 | 羞羞视频在线观看网站 | 久久亚洲欧美日韩精品专区 | 国产精品久久午夜夜伦鲁鲁 | 国产日韩精品在线 | 色网站视频 | 99re视频这里只有精品 | 天堂一区二区三区 | 欧美日韩精品久久久免费观看 | 亚洲一区二区三区 | 99精品视频在线观看 | 青草视频在线 | 欧美综合久久 | 国产精品亚洲一区二区三区在线 | www.激情.com | 伊人免费视频二 | 免费观看的av毛片的网站 | 国产日韩精品在线 | 综合精品在线 | 天天久久 | 国产精品1区2区 | 日韩欧美在线播放 | 亚洲成人自拍 |