【STM32单片机学习】第七课:STM32的定时器和DS18B20调试

【朱老师课程总结】

第一部分、章节目录

3.7.1.STM32的5种定时器简介

3.7.2.SYSTICK定时器详解1

3.7.3.SYSTICK定时器详解2

3.7.4.SYSTICK定时器详解3

3.7.5.SYSTICK定时器详解4

3.7.6.STM32的定时器学习要点

3.7.7.定时器的数据手册

3.7.8.定时器例程分析和编程实践

3.7.9.问题解决及PWM输出功能引入

3.7.10.TIM2的PWM输出功能详解

3.7.11.TIM2的专用PWM输出编程实践

3.7.12.DS18B20程序在STM32上的移植1_2

3.7.13.DS18B20程序的移植3


第二部分、随堂记录

3.7.1.STM32的5种定时器简介

(1)看门狗定时器(WWDG)
(2)Systick定时器
(3)高级定时器(TIM1 & TIM8)
(4)通用定时器(TIMx)
(5)基本定时器(TIM6 & TIM7)


3.7.2.SYSTICK定时器详解1

3.7.1.1、SYSTICK定时器的作用
(1)专用于产生RTOS的系统滴答时钟
(2)可用于裸机程序中短时间精确延时函数
(3)可用作普通定时中断功能
3.7.1.2、SYSTICK定时器的数据手册
(1)24位定时器
(2)各个寄存器含义


3.7.3.SYSTICK定时器详解2

3.7.3.1、SYSTICK寄存器在标准库中的封装
(1)SysTick_CLKSourceConfig
(2)SysTick_Config
SysTick_Config函数配置的状况是:默认使用AHB时钟,会产生中断,中断优先级为最低,并且最末尾启动了定时器
3.7.3.2、SYSTICK定时器的2种工作模式
(1)中断方式
(2)查询方式
3.7.3.3、SYSTICK定时器的定时计算
(1)公式:重装载值 = systick时钟频率(Hz) * 想要的定时时间(S)
(2)举个栗子(1ms) CNT = 72000000Hz * 0.001S = 72000
(3)查询方式和中断方式都是这样计算


3.7.4.SYSTICK定时器详解3

3.7.4.1、SYSTICK中断实现LED每隔500ms闪烁一次

开发板使用ARM3.0,接线时LED端口接P0端口,对应PB8-15,实际实验时用PB8这个LED

3.7.5.SYSTICK定时器详解4

3.7.5.1、SYSTICK查询方式实现us和ms级精确延时函数
大家要理解:查询和中断方式的差异,查询方式是阻塞式的,中断方式是非阻塞的。
void delay_us(unsigned int us)
void delay_ms(unsigned int ms)

3.7.6.STM32的定时器学习要点

3.7.6.1、通用定时器和其他的区别
(1)其实最多可以有17个定时器
(2)功能差别
3.8.6.2、STM32定时器的学习要点
(1)先学会定时器基本功能的使用
(2)高级功能用到时再去细看
(3)设计本身的复杂性导致学习难度大,要有耐心
(4)很多书面概念要搞清楚,需要前后不停对照,必要时要记笔记帮助理解
(5)学习三宝:数据手册+外设库源码+例程

3.7.7.定时器的数据手册


3.7.8.定时器例程分析和编程实践

3.7.9.问题解决及PWM输出功能引入

3.7.9.1、上节遗留问题解决
cnt = 1ms * 5Khz = 0.001s*5000Hz = 5
实际测试得到的是1KHz的结果,说明前面分析有误。
计算:假设时钟是72M,则定时时间为:5/10KHz = 0.5ms,方波周期就为1KHz,对的上。
结论:APB1时钟确实是36MHz,但是APB1到定时器时钟那边时中间被乘以2了,所以又变成72MHz了。

3.7.9.2、定时器的PWM输出功能介绍
(1)通过定时器的中断,在isr中将一个GPIO引脚电平反转,可以实现PWM输出功能
(2)定时器附带专用的PWM输出功能,定时器内部和某个引脚绑定,然后定时器设置好了之后内部开始+1或者-1,然后时间到之后不是产生中断,而是直接将绑定的引脚电平反转产生PWM输出。


3.7.10.TIM2的PWM输出功能详解

3.7.10.1、专用PWM输出的实现原理
(1)所谓的比较原理,涉及3个计数有关的寄存器
(2)在输入捕获/输出比较功能中
3.7.10.2、相关的寄存器
(1)TIMxCNT、TIMxARR、TIMxCCRn
(2)CCMR1、CCMR2、CCER
(3)CR1、CR2、PSC
3.7.10.3、标准库中相关API
(1)TIM_TimeBaseInit
(2)TIM_OCnInit
(3)TIM_OCnPreloadConfig
(4)TIM_OCnFastConfig
(5)TIM_ClearOC1Ref
(6)TIM_OCnPolarityConfig


3.7.11.TIM2的专用PWM输出编程实践
 


3.7.12.DS18B20程序在STM32上的移植1_2


3.7.13.DS18B20程序的移植3

3.7.13.1、效果的演示
3.7.13.2、问题1:串口显示和调试
(1)必须用板载DB9串口,USB转串口不行
(2)如何又能下载程序又能让串口工作
(3)串口涉及到的模块时钟使能别忘了
3.7.13.3、DS18B20程序要点
(1)P3.7对应GPA15,默认是JTDI,需要重映射为GPIO
(2)PA15输出时要配置为OD输出,才能实现双向IO
注意:STM32的GPIO要想实现双向IO,有2个条件:OD输出模式 + 外部上拉电阻
(3)原来程序中的一些用i++实现的延时,要注意用新的延时函数替换

上一篇:STM32—关于SYSTICK系统时钟的详解及学习笔记


下一篇:STM32F10X - 时钟(1)