12-30
//--------------------------------TIMER1
先说下RCC时钟
//-------------------------RCC(具体参考所用芯片)
AHB所连接的时钟
* RCC_AHBPeriph_DMA1,RCC_AHBPeriph_DMA2,RCC_AHBPeriph_SRAM
* RCC_AHBPeriph_FLITF,RCC_AHBPeriph_CRC,RCC_AHBPeriph_FSMC
* RCC_AHBPeriph_SDIO
APB1所连接的时钟
* RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, RCC_APB1Periph_TIM4,
* RCC_APB1Periph_TIM5, RCC_APB1Periph_TIM6, RCC_APB1Periph_TIM7,
* RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, RCC_APB1Periph_SPI3,
* RCC_APB1Periph_USART2, RCC_APB1Periph_USART3, RCC_APB1Periph_USART4,
* RCC_APB1Periph_USART5, RCC_APB1Periph_I2C1, RCC_APB1Periph_I2C2,
* RCC_APB1Periph_USB, RCC_APB1Periph_CAN1, RCC_APB1Periph_BKP,
* RCC_APB1Periph_PWR, RCC_APB1Periph_DAC
APB2所连接的时钟
* RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,
* RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE,
* RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,
* RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,
* RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3
TIMER1的时钟在APB2,要先使能下
pm:
在配置TIM1的时候,TIM_TimeBaseInitTypeDef该结构体本身TIM_ReperitionCounter的
定义为u8的,但却给出了一个初始该结构体的函数中,又赋予u16,但是在书写
TIM_ReperitionCounter为0x0000(0x00)的时候,提示
src/USER/hardware.c(105): error: #136: struct "
最后放弃定义了,好像没什么影响
一直卡住的,原因是中断标志位要软件清零,硬件置位。
这个是我最hate的一点,还以为会自动清零的,有点受AVR的影响,呵呵
计数器的时钟频率(CK_CNT)等于fCK_PSC/( PSC[15:0]+1)
fck_PSC=TIM1_CLK=72M
CK_CNT=72M/(71+1)=1M,设定重装载数(u16)为10000,为定时1s发一串字符,需要中断100次。
12-31
TIM1_PWM
使用TIM1输出pwm。
从芯片的引脚图可以看出,PA8,PA9为TIM1_CH1、TIM1_CH2,也可以使用芯片GPIO重映射功能,进而使用TIM4。
配置TIM1初始化,OC1初始化,产生占空比50%的PWM。