历史上的今天
今天是:2025年06月19日(星期四)
2018年06月19日 | STM32CubeMX时钟配置详解
2018-06-19 来源:eefocus
软件:
(1)STM32CubeMX
(2)SW4STM32
实验平台:STM32F407VET6开发板
使用STM32CubeMX的一个好处就是图形化配置,在时钟配置方面,主要了解清楚高级外设总线(APB1、APB2)控制哪些外设。
(0)先配置好PA6、PA7(控制LED灯),好观察实验现象
(1)首先配置RCC(复位和时钟控制),选择外部高速始终,如下图 
(2)为了测试不同APB的时钟频率效果,在此选择了TIM1和TIM2,按下图配置
(3)为什么选择以上两个定时器作为例子?参考STM32F4XX中文参考手册,找到RCC相关内容,如图 

可知TIM1 在APB2,TIM2 在APB1
(4)进入时钟配置,我的STM32F407开发板外部晶振是8MHz的,在Input freequency 输入8,在HCLK 那里会提示最大频率168MHz,输入168,然后自动寻求配置,注意第一次配置出来的还是内部时钟HSI 的,要选择为HSE ,配置好后如下图 
顺便提一下,STM32F103的开发板也差不多的,只不过F1的最高时钟频率是72MHz。
(5)配置好后时钟后可以看到APB1 定时器(如TIM2)频率为84MHz,APB2 定时器(如TIM1)频率为168MHz
(6)设置NVIC,TIM1是高级定时器,选择更新中断,TIM2是通用定时器 

除了定时器,我自己还设置了两个串口中断,可以不用理会
(7)设置定时器
上面两个定时器设置实现的都是定时1s进入中断处理。
以TIM1为例,APB2时钟频率168MHz=168,000,000Hz,选取预分频系数(Prescaler)(16位存储,预分频系数最大65535)为16799,则定时器的时钟频率为168,000,000 / 16800 = 10000 Hz,频率为1万赫兹,选取计数周期(Counter Period,16位存储)为9999, 所以定时周期1s,同理TIM2也是同样计算,如果APB的时钟频率改变,一样安装上面的方法进行设置。
(8)生成SW4STM32工程,打开,在main函数里面while前启动定时器,如下代码
/* Infinite loop */
/* USER CODE BEGIN WHILE */
HAL_TIM_Base_Start_IT(&htim1);/启动定时器
HAL_TIM_Base_Start_IT(&htim2);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
(9)编写定时器中断
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM2) // 判断哪个定时器中断
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_6); // 翻转灯
}
if(htim->Instance == TIM1) // 判断哪个定时器中断
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_7); // 翻转灯
}
}
/* USER CODE END 4 */
最后烧写到开发板实现预定效果
史海拾趣
|
从我们公司的现状,看到中国公司的一般现象。我们公司从代理国外产品起家,到自行研发生产。开始创业,大家还沉下来,研究原理。现在公司到了一定规模,由于积累不深,问题频频暴露。而且到了规模,老板拼命搞外来和尚会念经! 皮之不存,毛将粘附 ...… 查看全部问答> |
|
Error: Design requires 1087 I/O resources -- too many to fit in 314 available in the selected device or any device in the device familyError: Cannot find device that meets Compiler settings specifications 中文意思: &nbs ...… 查看全部问答> |
|
如果让51的一个引脚,比如引脚 P1_0 ,怎样做函数的参数呢?这个参数是什么类型呢? 写成 void function(sbit pin) ,总是报 sbit 又问题 写成 void function(pin) ,虽然没有报错,但是执行的时候又问题 … 查看全部问答> |
|
BX利用bit[0]来确定是ARM状态还是Thumb状态 ? 书上这样写的,个人不理解,请大家指导以下. 原文:有些指令对r15的操作有特殊的要求.比如,指令BX利用bit[0]来确定需要跳转的子程序是ARM状态 ...… 查看全部问答> |
|
Loader: One or more sections of your program falls into a memory region that is not writable. These regions will not actually be written to the target. Check your linker configuration and/or memory map.Error: EMI ...… 查看全部问答> |
|
我收到了评估套件。大吃一惊,我从来没看一款开发板这么大的包装。我晕 编程环境可以到https://www.altera.com/download/software/quartus-ii-we 下载网络版的3G多,我下了两三天的样子。 该版的调试工具(包括原理图例程)可以到http://www ...… 查看全部问答> |




