须知
开发板:STM32F103C8T6最小系统板
编译环境:Keil5 MDK
辅助软件:STM32 CubeMX
课程教学:基于正点原子HAL库学习教程
其余配件:江科大STM32配件包 和 示波器一台
备注: 因为这块开发板没有基本定时器,所以本文也没有基本定时器的内容
本文1.3和2.1部分的标题不知道为什么显示不对
大家凑合一下应该还是看得懂标题的
一. 通用定时器
1.1 定时器中断
1.1.1 实现目标
我们这里目标为用定时器2实现LED以500ms为间隔亮灭
注意LED接PA6
1.1.2 CubeMX配置
配置系统线
配置时钟
这里用高速就行了,所以低速就不设置了
配置GPIOA6
配置定时器2
注意Psc和Arr都需要减1所以应该设置为7199和4999
配置NVIC
设置时钟频率并生成工程
这里有个便捷方法,就是在红框里面输入72,然后按下enter,再点击OK
这样CubeMX就会帮我们自动配好其他的
这样我们的CubeMX就写好了,接下来是代码部分
1.1.3 程序编写
这里我们要先在主函数中给中断使能
HAL_TIM_Base_Start_IT(&htim2); //使能中断
然后我们在主函数下面加上
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM2) //判断是否为定时器2产生的中断
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_6);//GPIOA6电平翻转
}
}
再然后我们编译并下载程序,我们就会发现在PA6上的LED以500ms为间隔亮灭了
1.2 定时器输入比较(PWM)
1.2.1 实现目标
我们的目标是实现LED的呼吸灯,同时我们在旁边点亮一个LED来作为对比
注意一个LED接PA0,另一个LED接PA6
1.2.2 CubeMX配置
这里的配置和上面的定时器中断开始和结尾是一样的
所以看过上面部分的朋友可以直接看定时器部分的配置
但需要注意这里不用配置NVIC
配置系统线
配置时钟
这里用高速就行了,所以低速就不设置了
配置GPIOA6
配置定时器2
这里附上一张总的引脚定义图,可以作为参考
接了下来我们配置定时器2 PWM
具体原理我就不讲解了,不懂的去百度都有
设置时钟频率并生成工程
这里有个便捷方法,就是在红框里面输入72,然后按下enter,再点击OK
这样CubeMX就会帮我们自动配好其他的
这样我们的CubeMX就写好了,接下来是代码部分
1.2.3 程序编写
首先我们需要定义一个全局变量
uint16_t Pwm; //PWM控制
记下来我们在主程序while前面加入这句代码
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); //开启 定时器2 PWM通道1