完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
STM32的时钟系统相当的复杂,包含了5个时钟源,分别是HSI HSE LSI LSE PLL,HSI是高速内部时钟、RC振荡器,频率为8MHz,HSE是高速外部时钟,即晶振,晶振频率为8MHz。LSI为低速内部时钟、RC振荡器,频率40kHz,LSE为低速外部时钟,接32.768kHz晶振,作为RTC时钟源。PLL为锁相环倍频输出,最大不超过72M。
在STM32Cube中结构如下: 有关时钟部分的代码: 1.配置TIM时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 2.定时器基本配置 void TIM3_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // TIM_OCInitTypeDef TIM_OCInitStructure ; TIM_DeInit(TIM2); //复位TIM2定时器 TIM_TimeBaseStructure.TIM_Period = 5; // 2.5ms TIM_TimeBaseStructure.TIM_Prescaler = 36000; // 分频36000 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数方向向上计数 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_ClearFlag(TIM3, TIM_FLAG_Update); TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); TIM_Cmd(TIM3, ENABLE); } TIM_Period设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在0x0000和0xFFFF之间。 TIM_Prescaler设置了用来作为TIMx时钟频率除数的预分频值。它的取值必须在0x0000和0xFFFF之间。 TIM_ClockDivision的作用是做一段延时,一般在特殊场合的时候会用到,可不关心。 TIM_CounterMode选择了计数器模式,TIM_CounterMode_Up,TIM向上计数模式; TIM_CounterMode_Down,TIM向下计数模式;TIM_CounterMode_CenterAligned1,TIM中央对齐模式1计数模式;TIM_CounterMode_CenterAligned2,TIM中央对齐模式2计数模式;TIM_CounterMode_CenterAligned3,TIM中央对齐模式3计数模式。 3.配置NVIC NVIC_InitStructure.NVIC_IRQChannel= TIM2_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); 4.定义中断 void TIM3_IRQHandler(void) { ......//中断处理 } 定时器的基本设置 1.TIM_TimeBaseStructure.TIM_Prescaler = 7199;//时钟预分频数 例如 :时 钟频率=72/(时钟预分频+1) 2.TIM_TimeBaseStructure.TIM_Period = 9999; // 自动重装载寄存器周期的值(定时 时间) 累计 0xFFFF个频率后产生个更新或者中断(也是说定时时间到) 3.TIM_TimeBaseStructure.TIM_CounterMode = TIM1_CounterMode_Up; //定时器 模式 向上计数 4.TIM_TimeBaseStructure.TIM_ClockDivision= 0x0; //时间分割值 5.TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);//初始化定时器2 6.TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //打开中断 溢出中断 7.TIM_Cmd(TIM3, ENABLE);//打开定时器 实例: 1. 打开STM32cubeMX的工程文件重新配置。开启定时器TIM3,选择内部时钟 2. 设置时钟频率 3. 内部时钟设置为不分频(CKD),则CK_PSC的时钟频率等于APB1的时钟频率108MHz,即108000 000Hz。若要定时时间为1s,则即可设置10800分频(预分频器寄存器 (TIMx_PSC)的值为10800-1),定时器的时钟CK_CNT的频率为10000Hz.则自动重载寄存器 (TIMx_ARR)设置为10000-1即定时为1s.TRGO为触发输出,可以触发内部ADC/DAC,这里我们没有用到这个功能,参数为默认设置. 4. 生成报告,以及生成代码,编译程序 5. 打开main.c文件,可在main()中的while循环中写下基本定时器中断模式计数。 /* USERCODE BEGIN 2 */ /*##-1- Start the TIM Base generation ininterrupt mode ####################*/ HAL_TIM_Base_Start_IT(&htim3); /* USER CODE END 2 */ /* USER CODE BEGIN WHILE */ while (1) { for(i=0;i<10000;i++); HAL_GPIO_LockPin(LED0_GPIO_Port,LED0_Pin); for(i=0;i<10000;i++); /* USER CODE END WHILE */ 由于采用的是7200分频,最后定时器的频率为10000Hz,分频一个脉冲为1/10000s,所以一秒的设置为10000-1,如上代码中可以看到管脚的LED每一秒明灭一次,至此STM32单片机定时器的设置完毕。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 08:27 , Processed in 0.666348 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号