STM32片上外设时钟使能 失能和复位的区别

今天分享的关于时钟知识,可能很多人没有在意过。这也是之前有朋友问过的问题,这里就简单给大家普及一下吧。
1
rcc时钟说明
在stm32参考手册中,都有reset and clock control(rcc)复位和时钟控制的章节。
在这一章节就可以看到有两类寄存器:peripheral reset register(rstr)外设复位寄存器和peripheral clock enable register(enr)外设时钟使能寄存器。
我们拿stm32f1参考手册为例,可以看到如下图寄存器:
一种是控制外设时钟的寄存器,一种是复位外设的寄存器。
2
外设时钟使能和失能
我们都知道,配置stm32外设,会先开启对应的时钟(也就是使能外设时钟)。
比如使能usart1时钟:
rcc_apb2periphclockcmd(rcc_apb2periph_usart1,enable);
失能usart1时钟:
rcc_apb2periphclockcmd(rcc_apb2periph_usart1,disable);
我之前分享过一篇文章《关于stm32时钟配置的那些坑》,里面有说:为什么我们要先开启stm32外设时钟。
从时钟使能和失能来说,这里再简单总结一下:使能外设时钟,我们就可以操作(读写)对应的外设;失能外设时钟,则我们无法操作对应的外设。
所以说,我们要操作外设,就必须要先开启(使能)其外设时钟。
3
复位外设
复位外设相信大部分朋友都能理解,如果使用寄存器开发过的朋友,更应该明白。
简单来说,复位外设就是恢复外设所有寄存器为上电默认值,也可以说复位了我们的配置。
可能有些地方你会也会发现xx外设配置之前有“重新初始化”外设的操作,如:
usart_deinit(usart1);
dma_deinit(dma1_channel1);
这重新初始化代码里面,其实就是调用了复位外设代码。
4
失能外设时钟和复位外设会对外设有何影响
上面说了失能外设时钟,我们就不能操作外设了。那么复位外设,我们还能操作外设吗?外设的时钟也会被复位吗?
可能许多人没有深入分析过,我这里简单总结一下:
1.外设时钟未使能(失能状态),不能配置(读写)外设;
2.复位外设,会复位外设的所有寄存器,但外设时钟不会被复位;
3.外设时钟使能,复位外设,再清除复位外设,可以继续配置(读写)外设。如usart1重新初始化:
rcc_apb2periphresetcmd(rcc_apb2periph_usart1, enable);
rcc_apb2periphresetcmd(rcc_apb2periph_usart1, disable);
usart_init(usart1, &usart_initstructure);
4.复位外设,但不清除复位外设,则不能继续配置(读写)外设。
rcc_apb2periphresetcmd(rcc_apb2periph_usart1, enable);
usart_init(usart1, &usart_initstructure);
在stm32的库函数中,外设复位和清除都是成对的,所以,我们用库开发的好处,就是相对不容易犯一些错误。
因为很多朋友使用寄存器开发,有很多细节问题没有深入研究过,就不知道问题到底处在哪里。
所以,建议用寄存器开发的朋友转向使用(spl、hal或cll)库开发。如果你非要一步一步理解底层,建议使用spl标准外设库。

如何打造中国的数字化无人工厂
大华视频警务督察解决方案的应用特点及实例分析
数字信号隔离,实现更好的设计
国产化航空航天连接器厂商华丰科技登录科创板
揭秘小米AI音箱的语音交互的优势
STM32片上外设时钟使能 失能和复位的区别
任正非称苹果是华为的老师 但是美国2009年就开始入侵华为服务器
戴森发布智能家居新品,台灯风扇与吸尘机器人争奇斗艳
如何利用无线电模块制作一台Arduino调频收音机
手机影像的下一个赛道会是模块化吗?
以鹏博士云网服务覆盖企业数字化转型全路径
2019全球安全解决方案市场保持增长态势 支出将破千亿美元
激战“双11”,扫地机器人的必胜“法宝”
不太现实,我不认为黄峥可以做出蛋白质机器人
焊接坡口形式有哪些_焊接坡口的几何尺寸
华为C-V2X解决方案:车、路、云三层架构,协同创新发展
七腾智能巡检机器人IP形象盛装亮相,全新营销服务助力“机器人换人”
浅谈集成稳压器调整率参数的测量原理和方法
FBEC2018专访| BlaCat陈喜:链游爆发是一个大概率事件,但现在用户体验较差
RC复位电路