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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于STM32F103RCT6的PWM輸出程序 包括重映射、不需重映射的

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:481097 發(fā)表于 2019-2-26 17:43 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
包括重映射、不需重映射的PWM輸出

單片機(jī)源程序如下:
  1. #include "pwm.h"
  2. #include "led.h"

  3. //PWM輸出初始化
  4. //arr:自動重裝值
  5. //psc:時(shí)鐘預(yù)分頻數(shù)
  6. void TIM1_1PWM_Init(u16 arr,u16 psc)
  7. {  
  8.         GPIO_InitTypeDef GPIO_InitStructure;
  9.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  10.         TIM_OCInitTypeDef  TIM_OCInitStructure;

  11.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// 使能TIM1時(shí)鐘
  12.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外設(shè)時(shí)鐘使能
  13.                                                                                     

  14.    //設(shè)置該引腳為復(fù)用輸出功能,輸出TIM1 CH1的PWM脈沖波形
  15.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復(fù)用推挽輸出
  17.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  18.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  19.         
  20.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動的自動重裝載寄存器周期的值         80K
  21.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值  不分頻
  22.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  23.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  24.         TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位


  25.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2
  26.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  27.         TIM_OCInitStructure.TIM_Pulse = 0; //設(shè)置待裝入捕獲比較寄存器的脈沖值
  28.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  29.         TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根據(jù)TIM_OCInitStruct中指定的參數(shù)初始化外設(shè)TIMx

  30.   TIM_CtrlPWMOutputs(TIM1,ENABLE);        //MOE 主輸出使能        

  31.         TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1預(yù)裝載使能         
  32.         
  33.         TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的預(yù)裝載寄存器
  34.         
  35.         TIM_Cmd(TIM1, ENABLE);  //使能TIM1

  36.    
  37. }

  38. void TIM1_2PWM_Init(u16 arr,u16 psc)
  39. {  
  40.         GPIO_InitTypeDef GPIO_InitStructure;
  41.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  42.         TIM_OCInitTypeDef  TIM_OCInitStructure;

  43.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// 使能TIM1時(shí)鐘
  44.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外設(shè)時(shí)鐘使能
  45.                                                                                     

  46.    //設(shè)置該引腳為復(fù)用輸出功能,輸出TIM1 CH1的PWM脈沖波形
  47.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //TIM_CH1
  48.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復(fù)用推挽輸出
  49.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  50.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  51.         
  52.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動的自動重裝載寄存器周期的值         80K
  53.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值  不分頻
  54.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  55.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  56.         TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位


  57.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2
  58.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  59.         TIM_OCInitStructure.TIM_Pulse = 0; //設(shè)置待裝入捕獲比較寄存器的脈沖值
  60.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  61.         TIM_OC2Init(TIM1, &TIM_OCInitStructure);  //根據(jù)TIM_OCInitStruct中指定的參數(shù)初始化外設(shè)TIMx

  62.   TIM_CtrlPWMOutputs(TIM1,ENABLE);        //MOE 主輸出使能        

  63.         TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1預(yù)裝載使能         
  64.         
  65.         TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的預(yù)裝載寄存器
  66.         
  67.         TIM_Cmd(TIM1, ENABLE);  //使能TIM1

  68.    
  69. }

  70. void TIM1_3PWM_Init(u16 arr,u16 psc)
  71. {  
  72.         GPIO_InitTypeDef GPIO_InitStructure;
  73.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  74.         TIM_OCInitTypeDef  TIM_OCInitStructure;

  75.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// 使能TIM1時(shí)鐘
  76.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外設(shè)時(shí)鐘使能
  77.                                                                                     

  78.    //設(shè)置該引腳為復(fù)用輸出功能,輸出TIM1 CH1的PWM脈沖波形
  79.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //TIM_CH1
  80.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復(fù)用推挽輸出
  81.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  82.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  83.         
  84.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動的自動重裝載寄存器周期的值         80K
  85.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值  不分頻
  86.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  87.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  88.         TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位


  89.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2
  90.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  91.         TIM_OCInitStructure.TIM_Pulse = 0; //設(shè)置待裝入捕獲比較寄存器的脈沖值
  92.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  93.         TIM_OC3Init(TIM1, &TIM_OCInitStructure);  //根據(jù)TIM_OCInitStruct中指定的參數(shù)初始化外設(shè)TIMx

  94.   TIM_CtrlPWMOutputs(TIM1,ENABLE);        //MOE 主輸出使能        

  95.         TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1預(yù)裝載使能         
  96.         
  97.         TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的預(yù)裝載寄存器
  98.         
  99.         TIM_Cmd(TIM1, ENABLE);  //使能TIM1

  100.    
  101. }




  102. void TIM1_4PWM_Init(u16 arr,u16 psc)
  103. {  
  104.         GPIO_InitTypeDef GPIO_InitStructure;
  105.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  106.         TIM_OCInitTypeDef  TIM_OCInitStructure;

  107.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// 使能TIM1時(shí)鐘
  108.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外設(shè)時(shí)鐘使能
  109.                                                                                     

  110.    //設(shè)置該引腳為復(fù)用輸出功能,輸出TIM1 CH1的PWM脈沖波形
  111.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //TIM_CH4
  112.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復(fù)用推挽輸出
  113.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  114.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  115.         
  116.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動的自動重裝載寄存器周期的值         80K
  117.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值  不分頻
  118.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  119.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  120.         TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位


  121.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2
  122.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  123.         TIM_OCInitStructure.TIM_Pulse = 0; //設(shè)置待裝入捕獲比較寄存器的脈沖值
  124.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  125.         TIM_OC4Init(TIM1, &TIM_OCInitStructure);  //根據(jù)TIM_OCInitStruct中指定的參數(shù)初始化外設(shè)TIMx

  126.   TIM_CtrlPWMOutputs(TIM1,ENABLE);        //MOE 主輸出使能        

  127.         TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1預(yù)裝載使能         
  128.         
  129.         TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的預(yù)裝載寄存器
  130.         
  131.         TIM_Cmd(TIM1, ENABLE);  //使能TIM1

  132.    
  133. }


  134. void TIM8_1PWM_Init(u16 arr,u16 psc)
  135. {  
  136.         GPIO_InitTypeDef GPIO_InitStructure;
  137.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  138.         TIM_OCInitTypeDef  TIM_OCInitStructure;

  139.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);// 使能TIM8時(shí)鐘
  140.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);  //使能GPIO外設(shè)時(shí)鐘使能
  141.                                                                                     

  142.    //設(shè)置該引腳為復(fù)用輸出功能,輸出TIM1 CH1的PWM脈沖波形
  143.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //TIM_CH1
  144.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復(fù)用推挽輸出
  145.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  146.         GPIO_Init(GPIOC, &GPIO_InitStructure);

  147.         
  148.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動的自動重裝載寄存器周期的值         80K
  149.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值  不分頻
  150.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  151.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  152.         TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位


  153.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式1
  154.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  155.         TIM_OCInitStructure.TIM_Pulse = 0; //設(shè)置待裝入捕獲比較寄存器的脈沖值
  156.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  157.         TIM_OC1Init(TIM8, &TIM_OCInitStructure);  //根據(jù)TIM_OCInitStruct中指定的參數(shù)初始化外設(shè)TIMx

  158.   TIM_CtrlPWMOutputs(TIM8,ENABLE);        //MOE 主輸出使能        

  159.         TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);  //CH1預(yù)裝載使能         
  160.         
  161.         TIM_ARRPreloadConfig(TIM8, ENABLE); //使能TIMx在ARR上的預(yù)裝載寄存器
  162.         
  163.         TIM_Cmd(TIM8, ENABLE);  //使能TIM1

  164.    
  165. }

  166. void TIM8_2PWM_Init(u16 arr,u16 psc)
  167. {  
  168.         GPIO_InitTypeDef GPIO_InitStructure;
  169.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  170.         TIM_OCInitTypeDef  TIM_OCInitStructure;

  171.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);// 使能TIM8時(shí)鐘
  172.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);  //使能GPIO外設(shè)時(shí)鐘使能
  173.                                                                                     

  174.    //設(shè)置該引腳為復(fù)用輸出功能,輸出TIM1 CH1的PWM脈沖波形
  175.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM_CH2
  176.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復(fù)用推挽輸出
  177.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  178.         GPIO_Init(GPIOC, &GPIO_InitStructure);

  179.         
  180.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動的自動重裝載寄存器周期的值         80K
  181.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值  不分頻
  182.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  183.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  184.         TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位


  185.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式1
  186.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  187.         TIM_OCInitStructure.TIM_Pulse = 0; //設(shè)置待裝入捕獲比較寄存器的脈沖值
  188.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  189.         TIM_OC2Init(TIM8, &TIM_OCInitStructure);  //根據(jù)TIM_OCInitStruct中指定的參數(shù)初始化外設(shè)TIMx

  190.   TIM_CtrlPWMOutputs(TIM8,ENABLE);        //MOE 主輸出使能        

  191.         TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);  //CH1預(yù)裝載使能         
  192.         
  193.         TIM_ARRPreloadConfig(TIM8, ENABLE); //使能TIMx在ARR上的預(yù)裝載寄存器
  194.         
  195.         TIM_Cmd(TIM8, ENABLE);  //使能TIM1

  196.    
  197. }

  198. void TIM8_3PWM_Init(u16 arr,u16 psc)
  199. {  
  200.         GPIO_InitTypeDef GPIO_InitStructure;
  201.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  202.         TIM_OCInitTypeDef  TIM_OCInitStructure;

  203.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);// 使能TIM8時(shí)鐘
  204.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);  //使能GPIO外設(shè)時(shí)鐘使能
  205.                                                                                     

  206.    //設(shè)置該引腳為復(fù)用輸出功能,輸出TIM8 CH3的PWM脈沖波形
  207.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH3
  208.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復(fù)用推挽輸出
  209.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  210.         GPIO_Init(GPIOC, &GPIO_InitStructure);

  211.         
  212.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動的自動重裝載寄存器周期的值         80K
  213.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值  不分頻
  214.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  215.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  216.         TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位


  217.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式1
  218.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  219.         TIM_OCInitStructure.TIM_Pulse = 0; //設(shè)置待裝入捕獲比較寄存器的脈沖值
  220.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  221.         TIM_OC3Init(TIM8, &TIM_OCInitStructure);  //根據(jù)TIM_OCInitStruct中指定的參數(shù)初始化外設(shè)TIMx

  222.   TIM_CtrlPWMOutputs(TIM8,ENABLE);        //MOE 主輸出使能        

  223.         TIM_OC3PreloadConfig(TIM8, TIM_OCPreload_Enable);  //CH1預(yù)裝載使能         
  224.         
  225.         TIM_ARRPreloadConfig(TIM8, ENABLE); //使能TIMx在ARR上的預(yù)裝載寄存器
  226.         
  227.         TIM_Cmd(TIM8, ENABLE);  //使能TIM1

  228.    
  229. }

  230. void TIM8_4PWM_Init(u16 arr,u16 psc)
  231. {  
  232.         GPIO_InitTypeDef GPIO_InitStructure;
  233.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  234.         TIM_OCInitTypeDef  TIM_OCInitStructure;

  235.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);// 使能TIM8時(shí)鐘
  236.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);  //使能GPIO外設(shè)時(shí)鐘使能
  237.                                                                                     

  238.    //設(shè)置該引腳為復(fù)用輸出功能,輸出TIM8 CH3的PWM脈沖波形
  239.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //TIM_CH3
  240.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復(fù)用推挽輸出
  241.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  242.         GPIO_Init(GPIOC, &GPIO_InitStructure);

  243.         
  244.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動的自動重裝載寄存器周期的值         80K
  245.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值  不分頻
  246.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  247.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  248.         TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位


  249.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式1
  250.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  251.         TIM_OCInitStructure.TIM_Pulse = 0; //設(shè)置待裝入捕獲比較寄存器的脈沖值
  252.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  253.         TIM_OC4Init(TIM8, &TIM_OCInitStructure);  //根據(jù)TIM_OCInitStruct中指定的參數(shù)初始化外設(shè)TIMx

  254.   TIM_CtrlPWMOutputs(TIM8,ENABLE);        //MOE 主輸出使能        

  255.         TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable);  //CH1預(yù)裝載使能         
  256.         
  257.         TIM_ARRPreloadConfig(TIM8, ENABLE); //使能TIMx在ARR上的預(yù)裝載寄存器
  258.         
  259.         TIM_Cmd(TIM8, ENABLE);  //使能TIM1

  260.    
  261. }


  262. void TIM2_3PWM_Init(u16 arr,u16 psc)
  263. {  
  264.         GPIO_InitTypeDef GPIO_InitStructure;
  265.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  266.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  267.         

  268.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);        //使能定時(shí)器2時(shí)鐘
  269.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外設(shè)和AFIO復(fù)用功能模塊時(shí)鐘
  270.         
  271.         GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2, ENABLE); //Timer2部分重映射  TIM2_CH3->PB10  

  272.    //設(shè)置該引腳為復(fù)用輸出功能,輸出TIM3 CH2的PWM脈沖波形        GPIOB.10
  273.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //TIM_CH3
  274.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復(fù)用推挽輸出
  275.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  276.         GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO

  277.    //初始化TIM2
  278.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動的自動重裝載寄存器周期的值
  279.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值
  280.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  281.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  282.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位
  283.         
  284.         //初始化TIM2 Channel3 PWM模式         
  285.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2
  286.          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  287.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  288.         TIM_OC3Init(TIM2, &TIM_OCInitStructure);  //根據(jù)T指定的參數(shù)初始化外設(shè)TIM2 OC3

  289.         TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的預(yù)裝載寄存器

  290.         TIM_Cmd(TIM2, ENABLE);  //使能TIM3
  291.         

  292.    
  293. }

  294. void TIM2_4PWM_Init(u16 arr,u16 psc)
  295. {  
  296.         GPIO_InitTypeDef GPIO_InitStructure;
  297.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  298.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  299.         

  300.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);        //使能定時(shí)器2時(shí)鐘
  301.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外設(shè)和AFIO復(fù)用功能模塊時(shí)鐘
  302.         
  303.         GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2, ENABLE); //Timer2部分重映射  TIM2_CH3->PB10  

  304.    //設(shè)置該引腳為復(fù)用輸出功能,輸出TIM3 CH2的PWM脈沖波形        GPIOB.10
  305.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //TIM_CH3
  306.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復(fù)用推挽輸出
  307.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  308.         GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO

  309.    //初始化TIM2
  310.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動的自動重裝載寄存器周期的值
  311.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值
  312.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  313.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  314.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位
  315.         
  316.         //初始化TIM2 Channel3 PWM模式         
  317.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2
  318.          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  319.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  320.         TIM_OC4Init(TIM2, &TIM_OCInitStructure);  //根據(jù)T指定的參數(shù)初始化外設(shè)TIM2 OC3

  321.         TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的預(yù)裝載寄存器

  322.         TIM_Cmd(TIM2, ENABLE);  //使能TIM3
  323.          
  324. }












  325. void TIM3_2PWM_Init(u16 arr,u16 psc)
  326. {
  327.         GPIO_InitTypeDef GPIO_InitStructure;
  328.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  329.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  330.         

  331.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        //使能定時(shí)器3時(shí)鐘
  332.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外設(shè)和AFIO復(fù)用功能模塊時(shí)鐘
  333.         
  334.         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5   

  335.    //設(shè)置該引腳為復(fù)用輸出功能,輸出TIM3 CH2的PWM脈沖波形        GPIOB.5
  336.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
  337.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復(fù)用推挽輸出
  338.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  339.         GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO

  340.    //初始化TIM3
  341.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動的自動重裝載寄存器周期的值
  342.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值
  343.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  344.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  345.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位
  346.         
  347.         //初始化TIM3 Channel2 PWM模式         
  348.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2
  349.          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  350.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  351.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根據(jù)T指定的參數(shù)初始化外設(shè)TIM3 OC2

  352.         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的預(yù)裝載寄存器

  353.         TIM_Cmd(TIM3, ENABLE);  //使能TIM3
  354.         

  355.         
  356.         
  357.         
  358.         
  359. }
復(fù)制代碼
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "pwm.h"

  5. int main(void)
  6. {        
  7.         //u16 led0pwmval=0;   
  8.         //u8 dir=1;        
  9.         delay_init();                     //延時(shí)函數(shù)初始化         
  10.         LED_Init();                          //初始化與LED連接的硬件接口
  11.         TIM1_1PWM_Init(199,7199);
  12.         TIM1_2PWM_Init(49,719);
  13.          
  14.         TIM1_3PWM_Init(49,719);
  15.         TIM1_4PWM_Init(49,719);
  16.          
  17.         TIM8_1PWM_Init(1999,719);
  18.         TIM8_2PWM_Init(1999,719);
  19.          
  20.         TIM8_3PWM_Init(1999,719);
  21.         TIM8_4PWM_Init(1999,719);
  22.          
  23.         TIM2_3PWM_Init(1999,719);
  24.         TIM2_4PWM_Init(1999,719);
  25.         TIM3_2PWM_Init(1999,719);


  26.                            
  27.                 TIM_SetCompare1(TIM1,20);
  28.                 TIM_SetCompare2(TIM1,25);
  29.                
  30.                 TIM_SetCompare3(TIM1,25);               
  31.                 TIM_SetCompare4(TIM1,25);
  32.                
  33.                 TIM_SetCompare1(TIM8,1000);
  34.                 TIM_SetCompare2(TIM8,1000);
  35.                
  36.                 TIM_SetCompare3(TIM8,1000);
  37.                 TIM_SetCompare4(TIM8,1000);
  38.                
  39.                 TIM_SetCompare3(TIM2,1000);
  40.                 TIM_SetCompare4(TIM2,1000);
  41.                 TIM_SetCompare2(TIM3,1000);


  42.         }
復(fù)制代碼


所有資料51hei提供下載:
PWM 11channel.7z (187.6 KB, 下載次數(shù): 83)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:656750 發(fā)表于 2019-12-23 08:44 | 只看該作者
意思是RCT6所有能作為PWM輸出的  都初始并且輸出PWM了?
回復(fù)

使用道具 舉報(bào)

板凳
ID:622206 發(fā)表于 2020-5-23 15:19 | 只看該作者
學(xué)習(xí),謝謝分享
回復(fù)

使用道具 舉報(bào)

地板
ID:622206 發(fā)表于 2020-5-23 15:19 | 只看該作者
學(xué)習(xí),謝謝分享,謝謝
回復(fù)

使用道具 舉報(bào)

5#
ID:291668 發(fā)表于 2023-3-2 14:17 | 只看該作者
辛苦了。碼這么多!理解了最好!
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 999国产视频 | 国产乱码精品一区二区三区中文 | 色欧美综合| 国产精品毛片 | 一区二区三区不卡视频 | 欧美xxxx在线 | 亚洲高清免费视频 | 欧美一区二区免费在线 | 午夜久久久 | 亚洲精品一 | 久久久精品 | 久久亚洲国产精品 | 99精品国产一区二区青青牛奶 | 亚洲精品小视频在线观看 | 国产精品久久网 | 亚洲狠狠 | 亚洲高清在线 | 亚洲天堂日韩精品 | 亚洲精品久久久久国产 | 美女国内精品自产拍在线播放 | 麻豆久久久久久 | 成人午夜高清 | 日韩无 | 精品欧美一区二区三区免费观看 | 久久久区 | 久久久久亚洲精品中文字幕 | 日韩欧美在线免费 | 亚洲精品中文字幕在线观看 | 性天堂网 | 精品欧美一区二区三区精品久久 | 亚洲免费一区 | 日韩一区二区黄色片 | 亚洲精品一 | 国产激情一区二区三区 | 嫩呦国产一区二区三区av | 国产精品久久久久久久久大全 | 欧美日韩综合一区 | 免费黄色的视频 | 丁香五月网久久综合 | 国产日产精品一区二区三区四区 | 精品日韩一区二区 |