Writen By 钟礼浩
华南农业大学 工程学院 QQ371724290
一.系统初始化
①void SystemInit(void);
子函数:static void SetSysClock(void)
关键值:
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M 8 //直接修改为晶振值即得到168MHz系统时钟 #define PLL_N 336
/* SYSCLK = PLL_VCO / PLL_P */ #define PLL_P 2
/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */
#define PLL_Q 7
* Supported STM32F4xx device revision | Rev A * System Clock source
| PLL (HSE)
* SYSCLK(Hz) | 168000000 * HCLK(Hz) | 168000000 * AHB Prescaler | 1 * APB1 Prescaler | 4 * APB2 Prescaler | 2 * HSE Frequency(Hz) | 25000000 * PLL_M | 25 * PLL_N | 336 * PLL_P | 2 * PLL_Q | 7 * PLLI2S_N | NA * PLLI2S_R | NA * I2S input clock | NA * VDD(V) | 3.3 * Main regulator output voltage * Flash Latency(WS) * Prefetch Buffer * Instruction cache * Data cache * Require 48MHz for USB OTG FS,
| Scale1 mode | 5 | OFF | ON | ON
| Enabled
* SDIO and RNG clock |
二.通用io结构体设置
①typedef struct
{
uint32_t GPIO_Pin; //针脚
This parameter can be any value of @ref GPIO_pins_define */ GPIOMode_TypeDef GPIO_Mode; //模式 This parameter can be a value of @ref GPIOMode_TypeDef */ GPIOSpeed_TypeDef GPIO_Speed; //速度 This parameter can be a value of @ref GPIOSpeed_TypeDef */ GPIOOType_TypeDef GPIO_OType; //输出物理模式 推挽or 开漏 GPIOPuPd_TypeDef GPIO_PuPd; }GPIO_InitTypeDef;
Pin选择: #define GPIO_Pin_0 #define GPIO_Pin_1 #define GPIO_Pin_2 #define GPIO_Pin_3
((uint16_t)0x0001) ((uint16_t)0x0002) ((uint16_t)0x0004) ((uint16_t)0x0008)
/* Pin 0 selected */ /* Pin 1 selected */ /* Pin 2 selected */ /* Pin 3 selected */
This parameter can be a value of @ref GPIOOType_TypeDef */ //上下拉电阻设置 This parameter can be a value of @ref GPIOPuPd_TypeDef */
#define GPIO_Pin_4 ((uint16_t)0x0010) /* Pin 4 selected */ #define GPIO_Pin_5 ((uint16_t)0x0020) /* Pin 5 selected */
#define GPIO_Pin_6 ((uint16_t)0x0040) /* Pin 6 selected */ #define GPIO_Pin_7 ((uint16_t)0x0080) /* Pin 7 selected */ #define GPIO_Pin_8 ((uint16_t)0x0100) /* Pin 8 selected */ #define GPIO_Pin_9 ((uint16_t)0x0200) /* Pin 9 selected */ #define GPIO_Pin_10 ((uint16_t)0x0400) /* Pin 10 selected */ #define GPIO_Pin_11 ((uint16_t)0x0800) /* Pin 11 selected */ #define GPIO_Pin_12 ((uint16_t)0x1000) /* Pin 12 selected */ #define GPIO_Pin_13 ((uint16_t)0x2000) /* Pin 13 selected */ #define GPIO_Pin_14 ((uint16_t)0x4000) /* Pin 14 selected */ #define GPIO_Pin_15 ((uint16_t)0x8000) /* Pin 15 selected */ #define GPIO_Pin_All ((uint16_t)0xFFFF) /* All pins selected */
Mode选择:
typedef enum {
GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */
GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */
GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */ GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */ }GPIOMode_TypeDef;
Speed速度设置: typedef enum
{
GPIO_Speed_2MHz = 0x00, /*!< Low speed */ GPIO_Speed_25MHz = 0x01, /*!< Medium speed */
GPIO_Speed_50MHz = 0x02, /*!< Fast speed */
GPIO_Speed_100MHz = 0x03 /*!< High speed on 30 pF (80 MHz Output max speed on 15 pF) */ }GPIOSpeed_TypeDef;
OType输出物理性质设置: typedef enum {
GPIO_OType_PP = 0x00, GPIO_OType_OD = 0x01 }GPIOOType_TypeDef;
PuPd上下拉电阻设置: typedef enum {
GPIO_PuPd_NOPULL = 0x00, GPIO_PuPd_UP = 0x01, GPIO_PuPd_DOWN = 0x02 }GPIOPuPd_TypeDef;
②开相关寄存器时钟:(注意开syscfg在APB2)
void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState) void RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState) void RCC_AHB3PeriphClockCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState) void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
AHB1首位形参:
RCC_AHB1Periph_GPIOA: RCC_AHB1Periph_GPIOB: RCC_AHB1Periph_GPIOC: RCC_AHB1Periph_GPIOD: RCC_AHB1Periph_GPIOE: RCC_AHB1Periph_GPIOF: RCC_AHB1Periph_GPIOG: RCC_AHB1Periph_GPIOG: RCC_AHB1Periph_GPIOI: RCC_AHB1Periph_CRC:
GPIOA clock GPIOB clock GPIOC clock GPIOD clock GPIOE clock GPIOF clock GPIOG clock GPIOG clock GPIOI clock CRC clock
BKPSRAM interface clock CCM data RAM interface clock DMA1 clock DMA2 clock
Ethernet MAC clock Ethernet Transmission clock Ethernet Reception clock Ethernet PTP clock USB OTG HS clock
USB OTG HS ULPI clock
RCC_AHB1Periph_BKPSRAM: RCC_AHB1Periph_CCMDATARAMEN: RCC_AHB1Periph_DMA1: RCC_AHB1Periph_DMA2: RCC_AHB1Periph_ETH_MAC: RCC_AHB1Periph_ETH_MAC_Tx: RCC_AHB1Periph_ETH_MAC_Rx: RCC_AHB1Periph_ETH_MAC_PTP: RCC_AHB1Periph_OTG_HS: RCC_AHB1Periph_OTG_HS_ULPI:
AHB2首位形参:
RCC_AHB2Periph_DCMI: RCC_AHB2Periph_CRYP: RCC_AHB2Periph_HASH: RCC_AHB2Periph_RNG: RCC_AHB2Periph_OTG_FS:
AHB3首位形参:
DCMI clock CRYP clock HASH clock RNG clock USB OTG FS clock
RCC_AHBPeriph: specifies the AHB3 peripheral to gates its clock. This parameter must be: RCC_AHB3Periph_FSMC
APB1首位形参:
RCC_APB1Periph_TIM2: RCC_APB1Periph_TIM3: RCC_APB1Periph_TIM4: RCC_APB1Periph_TIM5: RCC_APB1Periph_TIM6: RCC_APB1Periph_TIM7:
RCC_APB1Periph_TIM12: RCC_APB1Periph_TIM13: RCC_APB1Periph_TIM14: RCC_APB1Periph_WWDG: RCC_APB1Periph_SPI2: RCC_APB1Periph_SPI3: RCC_APB1Periph_USART2: RCC_APB1Periph_USART3: RCC_APB1Periph_UART4: RCC_APB1Periph_UART5: RCC_APB1Periph_I2C1: RCC_APB1Periph_I2C2: RCC_APB1Periph_I2C3: RCC_APB1Periph_CAN1: RCC_APB1Periph_CAN2: RCC_APB1Periph_PWR: RCC_APB1Periph_DAC:
APB2首位形参:
RCC_APB2Periph_TIM1: RCC_APB2Periph_TIM8: RCC_APB2Periph_USART1: RCC_APB2Periph_USART6: RCC_APB2Periph_ADC1: RCC_APB2Periph_ADC2: RCC_APB2Periph_ADC3: RCC_APB2Periph_SDIO: RCC_APB2Periph_SPI1: RCC_APB2Periph_SYSCFG: RCC_APB2Periph_TIM9:
TIM2 clock TIM3 clock TIM4 clock TIM5 clock TIM6 clock TIM7 clock TIM12 clock TIM13 clock TIM14 clock WWDG clock SPI2 clock SPI3 clock USART2 clock USART3 clock UART4 clock UART5 clock I2C1 clock I2C2 clock I2C3 clock CAN1 clock CAN2 clock PWR clock DAC clock
TIM1 clock TIM8 clock USART1 clock USART6 clock ADC1 clock ADC2 clock ADC3 clock SDIO clock SPI1 clock SYSCFG clock TIM9 clock
RCC_APB2Periph_TIM10: RCC_APB2Periph_TIM11:
TIM10 clock TIM11 clock
③GPIO_Init(GPIOx ,&GPIO_InitStructure); //与①共同协作,port与结构体为形参
三.开外部中断 ①GPIO_InitTypeDef;
EXTI_InitTypeDef;
NVIC_InitTypeDef; //定义结构体 ②开时钟(前述) 位时钟 ,syscfg
③void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) //GPIO设置
④void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex) //中断注册(port和位)
⑤typedef struct
{
uint32_t EXTI_Line; /*!< Specifies the EXTI lines to be enabled or disabled.
This parameter can be any combination value of @ref EXTI_Lines */ EXTIMode_TypeDef EXTI_Mode; /*!< Specifies the mode for the EXTI lines.
This parameter can be a value of @ref EXTIMode_TypeDef */ EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines.
This parameter can be a value of @ref EXTITrigger_TypeDef */ FunctionalState EXTI_LineCmd; /*!< Specifies the new state of the selected EXTI lines.
This parameter can be set either to ENABLE or DISABLE */ }EXTI_InitTypeDef;
EXTI_Line:
#define EXTI_Line0 #define EXTI_Line1 #define EXTI_Line2 #define EXTI_Line3 #define EXTI_Line4 #define EXTI_Line5 #define EXTI_Line6 #define EXTI_Line7 #define EXTI_Line8 #define EXTI_Line9 #define EXTI_Line10 #define EXTI_Line11 #define EXTI_Line12 #define EXTI_Line13 #define EXTI_Line14
#define EXTI_Line15
#define EXTI_Line16 PVD Output #define EXTI_Line17 RTC Alarm event
#define EXTI_Line18 USB OTG FS Wakeup from suspend event #define EXTI_Line19 Ethernet Wakeup event
#define EXTI_Line20 USB OTG HS (configured in FS) Wakeup event
#define EXTI_Line21 RTC Tamper and Time Stamp events #define EXTI_Line22 RTC Wakeup event
EXTI_Mode: typedef enum
{
EXTI_Mode_Interrupt = 0x00,√ EXTI_Mode_Event = 0x04 }EXTIMode_TypeDef;
EXTI_Trigger:
typedef enum {
EXTI_Trigger_Rising = 0x08,√ EXTI_Trigger_Falling = 0x0C, EXTI_Trigger_Rising_Falling = 0x10 }EXTITrigger_TypeDef;
EXTI_LineCmd: ENABLE DISABLE
⑥void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct) //初始化
⑦typedef struct
{
uint8_t NVIC_IRQChannel;
uint8_t NVIC_IRQChannelPreemptionPriority; // 0x00-0x0f取值
uint8_t NVIC_IRQChannelSubPriority; // 0x00-0x0f取值
FunctionalState NVIC_IRQChannelCmd; //ENABLE,DISABLE
} NVIC_InitTypeDef;
NVIC_IRQChannel:
typedef enum IRQn {
/****** Cortex-M4 Processor Exceptions Numbers ****************************************************************/ NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */ BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */
UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */ SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */ DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */ PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */ SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */ /****** STM32 specific Interrupt Numbers **********************************************************************/ WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */ TAMP_STAMP_IRQn = 2, /*!< Tamper and TimeStamp interrupts through the EXTI line */ RTC_WKUP_IRQn = 3, /*!< RTC Wakeup interrupt through the EXTI line */ FLASH_IRQn = 4, /*!< FLASH global Interrupt */ RCC_IRQn = 5, /*!< RCC global Interrupt */ EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */ EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ DMA1_Stream0_IRQn = 11, /*!< DMA1 Stream 0 global Interrupt */ DMA1_Stream1_IRQn = 12, /*!< DMA1 Stream 1 global Interrupt */ DMA1_Stream2_IRQn = 13, /*!< DMA1 Stream 2 global Interrupt */ DMA1_Stream3_IRQn = 14, /*!< DMA1 Stream 3 global Interrupt */ DMA1_Stream4_IRQn = 15, /*!< DMA1 Stream 4 global Interrupt */ DMA1_Stream5_IRQn = 16, /*!< DMA1 Stream 5 global Interrupt */ DMA1_Stream6_IRQn = 17, /*!< DMA1 Stream 6 global Interrupt */ ADC_IRQn = 18, /*!< ADC1, ADC2 and ADC3 global Interrupts */ CAN1_TX_IRQn = 19, /*!< CAN1 TX Interrupt */ CAN1_RX0_IRQn = 20, /*!< CAN1 RX0 Interrupt */ CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ TIM1_BRK_TIM9_IRQn = 24, /*!< TIM1 Break interrupt and TIM9 global interrupt */ TIM1_UP_TIM10_IRQn = 25, /*!< TIM1 Update Interrupt and TIM10 global interrupt */ TIM1_TRG_COM_TIM11_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */ TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ USART1_IRQn = 37, /*!< USART1 global Interrupt */ USART2_IRQn = 38, /*!< USART2 global Interrupt */ USART3_IRQn = 39, /*!< USART3 global Interrupt */ EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ RTC_Alarm_IRQn = 41, /*!< RTC Alarm (A and B) through EXTI Line Interrupt */
OTG_FS_WKUP_IRQn = 42, /*!< USB OTG FS Wakeup through EXTI line interrupt */ TIM8_BRK_TIM12_IRQn = 43, /*!< TIM8 Break Interrupt and TIM12 global interrupt */ TIM8_UP_TIM13_IRQn = 44, /*!< TIM8 Update Interrupt and TIM13 global interrupt */ TIM8_TRG_COM_TIM14_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */ TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare Interrupt */ DMA1_Stream7_IRQn = 47, /*!< DMA1 Stream7 Interrupt */ FSMC_IRQn = 48, /*!< FSMC global Interrupt */ SDIO_IRQn = 49, /*!< SDIO global Interrupt */ TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ UART4_IRQn = 52, /*!< UART4 global Interrupt */ UART5_IRQn = 53, /*!< UART5 global Interrupt TIM6_DAC_IRQn = 54, /*!< TIM6 global and DAC1&2 underrun error interrupts TIM7_IRQn = 55, /*!< TIM7 global interrupt DMA2_Stream0_IRQn = 56, /*!< DMA2 Stream 0 global Interrupt DMA2_Stream1_IRQn = 57, /*!< DMA2 Stream 1 global Interrupt DMA2_Stream2_IRQn = 58, /*!< DMA2 Stream 2 global Interrupt DMA2_Stream3_IRQn = 59, /*!< DMA2 Stream 3 global Interrupt DMA2_Stream4_IRQn = 60, /*!< DMA2 Stream 4 global Interrupt ETH_IRQn = 61, /*!< Ethernet global Interrupt ETH_WKUP_IRQn = 62, /*!< Ethernet Wakeup through EXTI line Interrupt CAN2_TX_IRQn = 63, /*!< CAN2 TX Interrupt CAN2_RX0_IRQn = , /*!< CAN2 RX0 Interrupt CAN2_RX1_IRQn = 65, /*!< CAN2 RX1 Interrupt CAN2_SCE_IRQn = 66, /*!< CAN2 SCE Interrupt OTG_FS_IRQn = 67, /*!< USB OTG FS global Interrupt DMA2_Stream5_IRQn = 68, /*!< DMA2 Stream 5 global interrupt DMA2_Stream6_IRQn = 69, /*!< DMA2 Stream 6 global interrupt DMA2_Stream7_IRQn = 70, /*!< DMA2 Stream 7 global interrupt USART6_IRQn = 71, /*!< USART6 global interrupt I2C3_EV_IRQn = 72, /*!< I2C3 event interrupt I2C3_ER_IRQn = 73, /*!< I2C3 error interrupt OTG_HS_EP1_OUT_IRQn = 74, /*!< USB OTG HS End Point 1 Out global interrupt OTG_HS_EP1_IN_IRQn = 75, /*!< USB OTG HS End Point 1 In global interrupt OTG_HS_WKUP_IRQn = 76, /*!< USB OTG HS Wakeup through EXTI interrupt OTG_HS_IRQn = 77, /*!< USB OTG HS global interrupt DCMI_IRQn = 78, /*!< DCMI global interrupt CRYP_IRQn = 79, /*!< CRYP crypto global interrupt HASH_RNG_IRQn = 80, /*!< Hash and Rng global interrupt FPU_IRQn = 81 /*!< FPU global interrupt } IRQn_Type;
⑧void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) ----
①开启中断服务函数 IRQ系列:
void EXTI0_IRQHandler(void) 例
②void EXTI_ClearITPendingBit(uint32_t EXTI_Line) //清除标志位 ----------
*/ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */
四.位操作什锦
①uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) //直接读位输入信息 返回:Bit_SET(非0),Bit_RESET(0);
②typedef struct {
__IO uint32_t MODER; __IO uint32_t OTYPER; __IO uint32_t OSPEEDR;
__IO uint32_t PUPDR; __IO uint32_t IDR;
__IO uint32_t ODR; //自异或可以翻转 __IO uint16_t BSRRL; //置1输出为ODR __IO uint16_t BSRRH; //置1输出为非ODR __IO uint32_t LCKR; __IO uint32_t AFR[2]; } GPIO_TypeDef;
五.定时器中断
①TIM_TimeBaseInitTypeDef
NVIC_InitTypeDef //结构体定义
②PSC ARR计算
To get TIM4 counter clock at 2 KHz, the prescaler is computed as follows: Prescaler = (TIM4CLK / counter clock) - 1 Prescaler = (168 MHz/(4 * 2 KHz)) - 1 =
To get TIM4 output clock at 1 Hz, the period (ARR)) is computed as follows: ARR = (TIM4 counter clock / output clock) - 1
③typedef struct
{
uint16_t TIM_Prescaler; //PSC 分频数
uint16_t TIM_CounterMode; #define TIM_CounterMode_Up #define TIM_CounterMode_Down #define TIM_CounterMode_CenterAligned1 #define TIM_CounterMode_CenterAligned2 #define TIM_CounterMode_CenterAligned3
uint32_t TIM_Period; //ARR计数器
uint16_t TIM_ClockDivision; //分频器 基于APB等时钟下的再分频
#define TIM_CKD_DIV1 #define TIM_CKD_DIV2 ((uint16_t)0x0000)√
((uint16_t)0x0010) ((uint16_t)0x0020) ((uint16_t)0x0040) ((uint16_t)0x0060)
((uint16_t)0x0000)√
((uint16_t)0x0100)
#define TIM_CKD_DIV4 ((uint16_t)0x0200)
uint8_t TIM_RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter reaches zero, an update event is generated and counting restarts from the RCR value (N).
This means in PWM mode that (N+1) corresponds to: - the number of PWM periods in edge-aligned mode - the number of half PWM period in center-aligned mode This parameter must be a number between 0x00 and 0xFF. @note This parameter is valid only for TIM1 and TIM8. */ } 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.
⑤void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
uint16_t TIM_IT:
* @arg TIM_IT_Update: TIM1 update Interrupt source √ * @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source * @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source * @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source
* @param TIMx: where x can be 1 to 14 to select the TIMx peripheral. *
* @note For TIM6 and TIM7 only the parameter TIM_IT_Update can be used
* @note For TIM9 and TIM12 only one of the following parameters can be used: TIM_IT_Update, * TIM_IT_CC1, TIM_IT_CC2 or TIM_IT_Trigger.
* @note For TIM10, TIM11, TIM13 and TIM14 only one of the following parameters can * be used: TIM_IT_Update or TIM_IT_CC1
* @note TIM_IT_COM and TIM_IT_Break can be used only with TIM1 and TIM8
⑥void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState) //启用时钟
* @param TIMx: where x can be 1 to 14 to select the TIMx peripheral.
⑦NVIC_InitTypeDef //写入结构体参数
⑧void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
⑨void TIMx_IRQHandler(void); 范例:
if(TIM2->SR&0x0001) //定时器溢出 * * * *
@arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source @arg TIM_IT_COM: TIM Commutation Interrupt source
@arg TIM_IT_Trigger: TIM Trigger Interrupt source √ @arg TIM_IT_Break: TIM Break Interrupt source
{
LED_Toggle(LED3); //操作
}
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG) //复位定时器
* @param TIMx: where x can be 1 to 14 to select the TIM peripheral.
uint16_t TIM_FLAG:
* @arg TIM_FLAG_Update: TIM update Flag √ * @arg TIM_FLAG_CC1: TIM Capture Compare 1 Flag * @arg TIM_FLAG_CC2: TIM Capture Compare 2 Flag * @arg TIM_FLAG_CC3: TIM Capture Compare 3 Flag
* @arg TIM_FLAG_CC4: TIM Capture Compare 4 Flag * @arg TIM_FLAG_COM: TIM Commutation Flag
* @arg TIM_FLAG_Trigger: TIM Trigger Flag √ * @arg TIM_FLAG_Break: TIM Break Flag
* @arg TIM_FLAG_CC1OF: TIM Capture Compare 1 over capture Flag * @arg TIM_FLAG_CC2OF: TIM Capture Compare 2 over capture Flag * @arg TIM_FLAG_CC3OF: TIM Capture Compare 3 over capture Flag * @arg TIM_FLAG_CC4OF: TIM Capture Compare 4 over capture Flag
六.PWM复用输出
①GPIO设置:
GPIO_InitTypeDef,外设端口时钟,GPIO_Init(GPIOD,&LED_Struct); 注意:GPIO_Mode=GPIO_Mode_AF;
② TIM_OCInitTypeDef xxx;
TIM_TimeBaseInitTypeDef xxx; //结构体定义
③开TIM时钟
④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 #define GPIO_PinSource15
GPIO_AF:
#define GPIO_AF_RTC_50Hz #define GPIO_AF_MCO #define GPIO_AF_TAMPER #define GPIO_AF_SWJ #define GPIO_AF_TRACE #define GPIO_AF_TIM1 #define GPIO_AF_TIM2 #define GPIO_AF_TIM3 #define GPIO_AF_TIM4 #define GPIO_AF_TIM5 #define GPIO_AF_TIM8 #define GPIO_AF_TIM9 #define GPIO_AF_TIM10 #define GPIO_AF_TIM11 #define GPIO_AF_I2C1 #define GPIO_AF_I2C2 #define GPIO_AF_I2C3 #define GPIO_AF_SPI1 #define GPIO_AF_SPI2 #define GPIO_AF_SPI3 #define GPIO_AF_USART1 #define GPIO_AF_USART2 #define GPIO_AF_USART3 #define GPIO_AF_I2S3ext #define GPIO_AF_UART4 #define GPIO_AF_UART5 #define GPIO_AF_USART6 #define GPIO_AF_CAN1 #define GPIO_AF_CAN2 #define GPIO_AF_TIM12 #define GPIO_AF_TIM13 #define GPIO_AF_TIM14 #define GPIO_AF_OTG_FS ((uint8_t)0x0E) ((uint8_t)0x0F) ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */
((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */
((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ ((uint8_t)0x00) /* TRACE Alternate Function mapping */ ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ ((uint8_t)0x07) /* USART1 Alternate Function mapping */ ((uint8_t)0x07) /* USART2 Alternate Function mapping */ ((uint8_t)0x07) /* USART3 Alternate Function mapping */ ((uint8_t)0x07) /* I2S3ext Alternate Function mapping */ ((uint8_t)0x08) /* UART4 Alternate Function mapping */ ((uint8_t)0x08) /* UART5 Alternate Function mapping */ ((uint8_t)0x08) /* USART6 Alternate Function mapping */ ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ ((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计算
⑥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.
⑦void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState) //时钟ARR重载 ,ENABLE * @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;
uint16_t TIM_OutputNState;
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. */
#define TIM_OutputNState_Disable ((uint16_t)0x0000)
#define TIM_OutputNState_Enable ((uint16_t)0x0004) @note This parameter is valid only for TIM1 and TIM8. */
#define TIM_OutputState_Disable ((uint16_t)0x0000
#define TIM_OutputState_Enable ((uint16_t)0x0001)√
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_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_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_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:占空比设置:共四通道
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.
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务