通过TIM3定时器精确定时1000毫秒的 GPIO 电平翻转以及 LED 闪烁。
第一步:
创建项目 LED005
一.打开STM32CubeMX,在电脑桌面找到下面的这个图标(不是你放电脑显示器的桌子面哦)。

二.选择这次用的开发版(STM32F411REx),双击打开。

三.生成项目前的配置。
1.管脚配置默认是设置好的。

2.调试方式配置,选Serial Wire

3.时钟树配置:由于开发板上没有外部晶振,使用内部RC振荡器,配置主频100MHz。


注:关于这个PSC=9999和ARR=9999怎么来的,我没有去算,直接给了DeepSeek一段话让他帮我算的,呵呵。不愿费脑子。
T = (psc+1)(arr+1)/Tclk Tclk=100mhz 我想要T=1000毫秒(1秒)的话,PSC=多少?arr=多少?
以下是DeepSeek解答的过程:
目标公式:
定时时间 T=fclk(psc+1)(arr+1),需实现 T=1秒,且 fclk=100MHz=100×106Hz。
推导参数关系:
变形公式得:
需找到整数 psc 和 arr,满足:
psc+1≤65536(假设寄存器为16位)
arr+1≤65536
可能的参数组合:
组合1:
则:
验证:
组合2:
则:
验证:
组合3:
则:
验证:
验证合法性:
所有参数均满足 psc≤65535、arr≤65535。
结果:
实现 1秒定时 的参数组合(任选其一):
psc=9999,arr=9999
psc=19,999,arr=4,999
psc=24,999,arr=3,999
任一组合同样满足精确的1秒定时需求。
4.GPIO配置,PC13连接蓝色按键,配置为输入模式;PA5连接LED2,配置为推挽输出模式。



5.非常关键的设置,不设置他就不能正常中断,我反正不懂为啥这样设置,希望大佬们能给小白们普及一下知识,万分感谢。

6.配置项目名称等,全程不能有中文。


配置全部完成,开始生成。

四.项目生成 完成后的详细操作
1.生成成功后,打开项目应该是这样的。


2.写入以下代码( HAL_TIM_Base_Start_IT(&htim3); )。

3.定义一个变量 (uint16_t dtTime3; )

4.时钟中断代码:

/* USER CODE BEGIN 1 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim == &htim3){
dtTime3++;
if(dtTime3 >=10)//这里如果是10就是10秒
{
dtTime3 = 0 ;
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
}
}
}
/* USER CODE END 1 */五.编译配置
1.编译时可能会出现以下错误。

修改编译器版本

选择debug模式

六.编译完成没有问题就可以写入了。
祝各位小白和我一样可以入门。
我要赚赏金
