STM32F4 ST官方评估板笔记(6) - PWM复用输出

PWM复用输出

注意:PWM输出的GPIO必须跟TIM的AF对应,TIM4的CH1-4分别为PD12-15。

GPIO_InitTypeDef  xxx;

  TIM_OCInitTypeDef  xxx;

  TIM_TimeBaseInitTypeDef  xxx;         //结构体定义

 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMx,ENABLE); //开GPIO,TIM时钟

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx,ENABLE);

 

GPIO_Init(GPIOx,&LED_Struct);

注意:GPIO_Mode=GPIO_Mode_AF;

 

void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF) //复用注册

GPIOx:

#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)

#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)

#define GPIOC               ((GPIO_TypeDef *) GPIOC_BASE)

#define GPIOD               ((GPIO_TypeDef *) GPIOD_BASE)

#define GPIOE               ((GPIO_TypeDef *) GPIOE_BASE)

#define GPIOF               ((GPIO_TypeDef *) GPIOF_BASE)

#define GPIOG               ((GPIO_TypeDef *) GPIOG_BASE)

#define GPIOH               ((GPIO_TypeDef *) GPIOH_BASE)

#define GPIOI               ((GPIO_TypeDef *) GPIOI_BASE)

 

GPIO_PinSource:

#define GPIO_PinSource0            ((uint8_t)0x00)

#define GPIO_PinSource1            ((uint8_t)0x01)

#define GPIO_PinSource2            ((uint8_t)0x02)

#define GPIO_PinSource3            ((uint8_t)0x03)

#define GPIO_PinSource4            ((uint8_t)0x04)

#define GPIO_PinSource5            ((uint8_t)0x05)

#define GPIO_PinSource6            ((uint8_t)0x06)

#define GPIO_PinSource7            ((uint8_t)0x07)

#define GPIO_PinSource8            ((uint8_t)0x08)

#define GPIO_PinSource9            ((uint8_t)0x09)

#define GPIO_PinSource10           ((uint8_t)0x0A)

#define GPIO_PinSource11           ((uint8_t)0x0B)

#define GPIO_PinSource12           ((uint8_t)0x0C)

#define GPIO_PinSource13           ((uint8_t)0x0D)

#define GPIO_PinSource14           ((uint8_t)0x0E)

#define GPIO_PinSource15           ((uint8_t)0x0F)

 

GPIO_AF:

#define GPIO_AF_RTC_50Hz      ((uint8_t)0x00)  /* RTC_50Hz Alternate Function mapping */

#define GPIO_AF_MCO          ((uint8_t)0x00)  /* MCO (MCO1 and MCO2) Alternate Function mapping */

#define GPIO_AF_TAMPER       ((uint8_t)0x00)  /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */

#define GPIO_AF_SWJ           ((uint8_t)0x00)  /* SWJ (SWD and JTAG) Alternate Function mapping */

#define GPIO_AF_TRACE        ((uint8_t)0x00)  /* TRACE Alternate Function mapping */

#define GPIO_AF_TIM1          ((uint8_t)0x01)  /* TIM1 Alternate Function mapping */

#define GPIO_AF_TIM2          ((uint8_t)0x01)  /* TIM2 Alternate Function mapping */

#define GPIO_AF_TIM3          ((uint8_t)0x02)  /* TIM3 Alternate Function mapping */

#define GPIO_AF_TIM4          ((uint8_t)0x02)  /* TIM4 Alternate Function mapping */

#define GPIO_AF_TIM5          ((uint8_t)0x02)  /* TIM5 Alternate Function mapping */

#define GPIO_AF_TIM8          ((uint8_t)0x03)  /* TIM8 Alternate Function mapping */

#define GPIO_AF_TIM9          ((uint8_t)0x03)  /* TIM9 Alternate Function mapping */

#define GPIO_AF_TIM10         ((uint8_t)0x03)  /* TIM10 Alternate Function mapping */

#define GPIO_AF_TIM11         ((uint8_t)0x03)  /* TIM11 Alternate Function mapping */

#define GPIO_AF_I2C1          ((uint8_t)0x04)  /* I2C1 Alternate Function mapping */

#define GPIO_AF_I2C2          ((uint8_t)0x04)  /* I2C2 Alternate Function mapping */

#define GPIO_AF_I2C3          ((uint8_t)0x04)  /* I2C3 Alternate Function mapping */

#define GPIO_AF_SPI1          ((uint8_t)0x05)  /* SPI1 Alternate Function mapping */

#define GPIO_AF_SPI2          ((uint8_t)0x05)  /* SPI2/I2S2 Alternate Function mapping */

#define GPIO_AF_SPI3          ((uint8_t)0x06)  /* SPI3/I2S3 Alternate Function mapping */

#define GPIO_AF_USART1       ((uint8_t)0x07)  /* USART1 Alternate Function mapping */

#define GPIO_AF_USART2       ((uint8_t)0x07)  /* USART2 Alternate Function mapping */

#define GPIO_AF_USART3       ((uint8_t)0x07)  /* USART3 Alternate Function mapping */

#define GPIO_AF_I2S3ext        ((uint8_t)0x07)  /* I2S3ext Alternate Function mapping */

#define GPIO_AF_UART4        ((uint8_t)0x08)  /* UART4 Alternate Function mapping */

#define GPIO_AF_UART5        ((uint8_t)0x08)  /* UART5 Alternate Function mapping */

#define GPIO_AF_USART6       ((uint8_t)0x08)  /* USART6 Alternate Function mapping */

#define GPIO_AF_CAN1         ((uint8_t)0x09)  /* CAN1 Alternate Function mapping */

#define GPIO_AF_CAN2          ((uint8_t)0x09)  /* CAN2 Alternate Function mapping */

#define GPIO_AF_TIM12         ((uint8_t)0x09)  /* TIM12 Alternate Function mapping */

#define GPIO_AF_TIM13         ((uint8_t)0x09)  /* TIM13 Alternate Function mapping */

#define GPIO_AF_TIM14         ((uint8_t)0x09)  /* TIM14 Alternate Function mapping */

#define GPIO_AF_OTG_FS        ((uint8_t)0xA)  /* OTG_FS Alternate Function mapping */

#define GPIO_AF_OTG_HS        ((uint8_t)0xA)  /* OTG_HS Alternate Function mapping */

#define GPIO_AF_ETH            ((uint8_t)0x0B)  /* ETHERNET Alternate Function mapping */

#define GPIO_AF_FSMC           ((uint8_t)0xC)  /* FSMC Alternate Function mapping */

#define GPIO_AF_OTG_HS_FS     ((uint8_t)0xC)  /* OTG HS configured in FS, Alternate Function mapping */

#define GPIO_AF_SDIO           ((uint8_t)0xC)  /* SDIO Alternate Function mapping */

#define GPIO_AF_DCMI          ((uint8_t)0x0D)  /* DCMI Alternate Function mapping */

#define GPIO_AF_EVENTOUT      ((uint8_t)0x0F)  /* EVENTOUT Alternate Function mapping */

 

⑤PSC ARR计算

  PSC为分频时基,例如TIM4的系统分频时钟为168MHz/4,若设定TIM4的时基为10kHz,则

  PSC=(168MHz / 4 / 10000)-1;

 

  ARR为计数器,总定时时间为(ARR+1)*时基,若要获得100Hz的定时,则ARR为99。

 

⑥TIM_TimeBaseInitTypeDef 参数设置

void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct) //开启函数

  * @param  TIMx: where x can be  1 to 14 to select the TIM peripheral.

 

⑦TIM_OCInitTypeDef      参数设置

typedef struct

{

  uint16_t TIM_OCMode;        #define TIM_OCMode_Timing                  ((uint16_t)0x0000)

#define TIM_OCMode_Active                  ((uint16_t)0x0010)

#define TIM_OCMode_Inactive                ((uint16_t)0x0020)

#define TIM_OCMode_Toggle                  ((uint16_t)0x0030)

#define TIM_OCMode_PWM1                    ((uint16_t)0x0060)

#define TIM_OCMode_PWM2                    ((uint16_t)0x0070)

 

  uint16_t TIM_OutputState;   #define TIM_OutputState_Disable            ((uint16_t)0x0000

                                  #define TIM_OutputState_Enable             ((uint16_t)0x0001)

 

  uint16_t TIM_OutputNState;   #define TIM_OutputNState_Disable           ((uint16_t)0x0000)

#define TIM_OutputNState_Enable            ((uint16_t)0x0004)                                  

  @note This parameter is valid only for TIM1 and TIM8. */

 

  uint32_t TIM_Pulse;        //占空比设置    = (ARR+1)*x%       0x0000-0xffff

 

  uint16_t TIM_OCPolarity;          #define TIM_OCPolarity_High                ((uint16_t)0x0000)

    #define TIM_OCPolarity_Low                 ((uint16_t)0x0002)

  

  uint16_t TIM_OCNPolarity;   /*!< Specifies the complementary output polarity.

                                   This parameter can be a value of @ref TIM_Output_Compare_N_Polarity

                                   @note This parameter is valid only for TIM1 and TIM8. */

 

  uint16_t TIM_OCIdleState;   /*!< Specifies the TIM Output Compare pin state during Idle state.

                                   This parameter can be a value of @ref TIM_Output_Compare_Idle_State

                                   @note This parameter is valid only for TIM1 and TIM8. */

 

  uint16_t TIM_OCNIdleState;  /*!< Specifies the TIM Output Compare pin state during Idle state.

                                   This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State

                                   @note This parameter is valid only for TIM1 and TIM8. */

} TIM_OCInitTypeDef;

 

void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)  //oc初始化,oc1可修改为oc1-oc4

 

  * @param  TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral.

---------------  

void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)  //oc重载 oc1可修改为oc1-oc4

 

uint16_t TIM_OCPreload:

  *            @arg TIM_OCPreload_Enable

  *            @arg TIM_OCPreload_Disable

 

 * @param  TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral.

---------------  

void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx)    //compare开启

 

uint16_t TIM_Channel:

  *            @arg TIM_Channel_1: TIM Channel 1

  *            @arg TIM_Channel_2: TIM Channel 2

  *            @arg TIM_Channel_3: TIM Channel 3

  *            @arg TIM_Channel_4: TIM Channel 4

 

uint16_t TIM_CCx:    #define TIM_CCx_Enable                      ((uint16_t)0x0001)

 #define TIM_CCx_Disable                     ((uint16_t)0x0000)

 

  * @param  TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral.

 

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState)  //时钟ARR重载 ,ENABLE

  * @param  TIMx: where x can be 1 to 14 to select the TIM peripheral.

 

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)

 

  * @param  TIMx: where x can be 1 to 14 to select the TIMx peripheral.

  * @param  NewState: new state of the TIMx peripheral.

  *          This parameter can be: ENABLE or DISABLE.

 

⑩+1:占空比设置:共四通道 即修改ARR.

void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1)

 * @param  TIMx: where x can be 1 to 14 except 6 and 7, to select the TIM peripheral.

 

void TIM_SetCompare2(TIM_TypeDef* TIMx, uint32_t Compare2)

  * @param  TIMx: where x can be 1, 2, 3, 4, 5, 8, 9 or 12 to select the TIM peripheral.

 

void TIM_SetCompare3(TIM_TypeDef* TIMx, uint32_t Compare3)

  * @param  TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.

 

void TIM_SetCompare4(TIM_TypeDef* TIMx, uint32_t Compare4)

  * @param  TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值