8.STM32的定时器和DS18B20调试

转自 https://edu.csdn.net/lecturer/505 朱老师物联网大讲堂
第一部分、章节目录
3.8.1.STM32的5种定时器简介
3.8.2.SYSTICK定时器详解1
3.8.3.SYSTICK定时器详解2
3.8.4.SYSTICK定时器详解3
3.8.5.SYSTICK定时器详解4
3.8.6.STM32的定时器学习要点
3.8.7.定时器的数据手册1
3.8.8.定时器的数据手册2
3.8.9.定时器的数据手册3
3.8.10.定时器的数据手册4
3.8.11.定时器例程分析和编程实践1
3.8.12.定时器例程分析和编程实践2
3.8.13.问题解决及PWM输出功能引入
3.8.14.TIM2的PWM输出功能详解1
3.8.15.TIM2的PWM输出功能详解2
3.8.16.TIM2的专用PWM输出编程实践1
3.8.17.TIM2的专用PWM输出编程实践2
3.8.18.DS18B20程序在STM32上的移植1
3.8.19.DS18B20程序在STM32上的移植2
3.8.20.DS18B20程序的移植3

第二部分、章节介绍
3.8.1.STM32的5种定时器简介
本节概要介绍STM32的5种定时器,并且讲了独立看门狗定时器和窗口看门狗定时器的差异。
3.8.2.SYSTICK定时器详解1
本节开始学习SYSTICK定时器,主要是数据手册中的相关内容带读。
3.8.3.SYSTICK定时器详解2
本节继续学习SYSTICK定时器,主要是标准库中和SYSTICK定时器有关的模块讲解。
3.8.4.SYSTICK定时器详解3
本节继续学习SYSTICK定时器,主要是代码实践,编写中断方式处理的SYSTICK定时器应用。
3.8.5.SYSTICK定时器详解4
本节继续学习SYSTICK定时器,主要是代码的调试、bug的接触、从实验总结结论等。
3.8.6.STM32的定时器学习要点
本节对STM32定时器的复杂性做阐述,并且讲了学习STM32定时器的思路和方法,后面课程将会本着这种思路进行学习。
3.8.7.定时器的数据手册1
本节开始带大家读STM32通用定时器的数据手册,主要是定时器的各种功能的简单介绍,让大家先有个初步认知。
3.8.8.定时器的数据手册2
本节接着带大家学习STM32通用定时器的数据手册,主要是时基单元的细节和时钟分频的时序图。
3.8.9.定时器的数据手册3
本节接着带大家学习STM32通用定时器的数据手册,主要是向上、向下计数,以及中央对齐模式等,并且详细解析了相对应的时序图。
3.8.10.定时器的数据手册4
本节接着带大家学习STM32通用定时器的数据手册,主要是时钟选择部分,以及标准库中和通用定时器常规定时功能有关的几个API。
3.8.11.定时器例程分析和编程实践1
本节带大家分析官方例程的写法,以及结合开发板进行移植和调试,本节主要完成了初步的移植。
3.8.12.定时器例程分析和编程实践2
本节接上节对移植的程序进行调试,并且解决bug至看到实验现象。
3.8.13.问题解决及PWM输出功能引入
本节主要解决上节遗留的时钟频率是36M还是72M的问题,通过引入示波器观察来得到最终答案并且在数据手册中找到证据。最后引入了专用PWM输出功能。
3.8.14.TIM2的PWM输出功能详解1
本节对通用定时器的专用PWM输出功能进行介绍,并且对数据手册和标准库中相应部分进行学习。
3.8.15.TIM2的PWM输出功能详解2
本节接上节继续讲解专用PWM输出功能,主要是标准库中涉及到的API的详解。
3.8.16.TIM2的专用PWM输出编程实践1
本节开始专用PWM输出功能编程实践,主要是对官方例程的一个讲解和细节确认。
3.8.17.TIM2的专用PWM输出编程实践2
本节接上节继续移植,主要是结果的检测和讲解,还有通过更改程序观察实验现象的方式进行二次学习。
3.8.18.DS18B20程序在STM32上的移植1
本节开始在STM32开发板上移植51课程时写的DS18B20程序,本节课主要是串口的移植和调试输出。
3.8.19.DS18B20程序在STM32上的移植2
本节接上节继续移植DS18B20的程序,主要是一些bug的解决和串口调试的确认。
3.8.20.DS18B20程序的移植3
本节完成DS18B20的移植,其实是备课时完成调试的,课程主要是复盘调试过程,强调调试中发现的主要问题,对大家做重点启发。

第三部分、随堂记录
3.8.1.STM32的5种定时器简介
(1)看门狗定时器(WWDG)
(2)Systick定时器
(3)高级定时器(TIM1 & TIM8)
(4)通用定时器(TIMx)
(5)基本定时器(TIM6 & TIM7)

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

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

3.8.4.SYSTICK定时器详解3
3.8.4.1、SYSTICK中断实现LED每隔500ms闪烁一次

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

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

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

3.8.7.定时器的数据手册1

3.8.8.定时器的数据手册2

3.8.9.定时器的数据手册3

3.8.10.定时器的数据手册4

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

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

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

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

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

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

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

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

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

发布了10 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40083589/article/details/89430542