文章目录
- 运行环境:
- 1.1 定时器和中断
- 1)定时器
- 2)轮询和中断
- 2.1配置
- 1)定时器配置
- 2)中断配置
- 3)RCC和SYS
- 3.1代码分析
- 3.2添加代码
- 1)中断处理函数IRQ中添加代码
- 2)launch设置
- 4.1定时器启动和定时器中断启动函数
- 5.1实验效果
运行环境:
ubuntu18.04.melodic
宏基暗影骑士笔记本
stm32f427IIH6
stlink
9-24v可调电源
1.1 定时器和中断
1)定时器
类似闹钟,设定好对应时间,会在设定的时刻响起铃声。
分频:降低频率
计数:用来计数
重载:清零
当定时器中的计数值达到重载值时,计数值就会被清零,触发中断
2)轮询和中断
例如厨房里烧着开水,主人在客厅里看电视。为了防止开水烧干,他有两种方式:
第一种是每隔10分钟就去厨房看一眼
另一种是等水壶烧开了之后开始发出响声再去处理。
前者是轮询的方式,后者是中断的方式。
2.1配置
1)定时器配置
内部时钟稳定、省电,适用于精度要求不高的应用
分频值:18000
计算周期(重载值):10000
A板计算:
180 000 000/180 00 /10000 = 1Hz
(1Hz,每秒触发一次中断)
实际填入17999、9999 (因为从0开始计数)
TIM1挂载在APB2
2)中断配置
打开定时器更新中断(满了触发中断)
3)RCC和SYS
为每个外设 生成外设初始化.c/.h文件
3.1代码分析
初始化了定时器,但是还没启动,需要启动定时器
进入 初始化函数MX_TIM1_Init(),启动定时器
中断触发位置:
中断触发后就会执行这个函数 HAL_TIM_IRQHandler(&htim1),这个函数将定时器初始化,重新开始计数。
3.2添加代码
1)中断处理函数IRQ中添加代码
// 每秒翻转一次
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_11);
HAL_GPIO_TogglePin(GPIOF , GPIO_PIN_14);
make编译,F5烧录调试
2)launch设置
修改成以下内容:可执行文件名是freeRTOS_LED.elf
{ =400x
"configurations": [
{
"showDevDebugOutput": "parsed",
"cwd": "${workspaceRoot}",
"executable": "./build/TIM1.elf",
"name": "Debug STM32",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"device": "stm32f427",
"configFiles": [
"interface/stlink-v2-1.cfg",
"target/stm32f4x.cfg"
]
}
]
}