作为一个STM32的菜鸟级人物,我刚开始接触STM32时,其实和当年开始学习51单片机的心理是一样的。茫然,谁说不是呢?但是,正常的学习途径无非就是看书,然后敲代码,最后烧程序,有问题就check,然后再继续烧,我都怀疑我快成了火头工。因为在我的印象中,只有这类职业才和“烧”有着密不可分的联系。即使当一名敬业又牛逼的火头工是我毕生的梦想。OK,不侃了。我希望,通过写日志把我作为一个菜鸟在学习STM32中的问题记录下来,同时以我为鉴,规避那些没有必要的破事。
1. 学习STM32要不要基础
原则上它应该是需要的,但是,我们也能发现很多人也是没有基础的。比如说,我们实验室的大师兄原来是管理专业,但是现在相当牛逼,软硬皆通。如果你和很多致力于在技术领域中作出一番成就的人一样,你必须记住:你再也不能任性地说要给自己一大块时间系统地学习知识,不现实。更多的时候,情况是:敲代码时需要什么你就去找相应的“部分知识”,然后搞明白,解决当前的问题。就是这样。
2. 学习STM32需要什么基础
理论上,需要数字电路,模拟电路,C语言编程基础,单片机会一点就更好了,这样的话会能适应STM32的编程开发思路。不过帮助不大,这也是我要写“浅谈时钟问题”的原因。而我的情况是,全都学过,但你看清楚,只是学过而已。关于数字电路和模拟电路这种课程,我也是记不得什么了。好在我们实验室,技术方面的书从来不缺。
3. 学习STM32对性别有要求吗
一般,女生都会问这个问题。我也问过,所以你就知道我为什么能成为“妇女之友”了。玩笑玩笑啦。其实没有,女生在这方面有先天性的优势,心思细腻,稍一转化,这就是态度认真的同义词。而且,世界上第一个程序员是女性。
4. 进入正题
STM32的新手,一般都会对一个问题很纠结。我也是,就是所谓的”时钟问题“。我们在尽心STM32编程时,会痛苦地发现这样一个事实:不管你要干嘛,你首先要做的一件事就是使能时钟。而且可能每一次的时钟还是不同的。你就会问:为什么要使能时钟?为什么每次使能的时钟还不一样呢?为什么51单片机中没有这些鬼?
在学51单片机的时候,基本上接触不到I/O方向和外设时钟的概念,I/O想输入就直接读,想输出就直接赋值,串口、AD转化、外部中断等等也都是想用就用,不需要单独配置时钟。这样在初学时的确方便了很多,不需要有乱七八糟的设置就能让芯片跑起来,但是随之带来的就是所谓的功耗问题。但是作为初学者,谁他妈还管这个啊?能让程序跑起来就已经让我们兴奋得几个晚上睡不着觉了。说这话不太合适,但事实上很多芯片生产厂商也不考虑这个问题。
可是随着电子产品集成度越来越高,功耗和发热越来越严重,芯片厂商非常无奈也在开始想办法避免这个问题,而最直接的思路当然就是用多少功能就使能多少功能,对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。如果不用的就完全关闭,尽可能降低芯片功耗,所以就出现了这么多的时钟和IO配置。说白了,时钟的功能就好像是一个小开关,你要用什么寄存器就先对应的打开开关,即:使能对应的时钟。
实际上,在这里面还涉及到一个时钟门控技术,而这又涉及到同步电路,我们都知道(默认你们都知道)在同步电路中总是有一个时钟控制。这里我就不赘述了,如果你和我一样是一个强迫症患者,请你回去翻翻一本叫《数字电子技术基础》的书,你一定可以找到答案的,相信我吧。
到这里你就差不多能够理解为什么STM32编程需要不断地使能时钟了,因为默认情况下这些时钟都是disable的。你要使用它,当然需要enable了。如果再不明白,我就想骂了:寄存器是由D触发器组成的,只有送来了时钟,触发器才能被改写值,这样寄存器才能工作。只不过,在51单片机一个时钟系统把一切都包了,在STM32中,我们很明确地做好了分工,让大家各司其职,其实这样还有一个好处就是,不是每个外设都需要系统时钟那么高的频率,就好像是:哪个公司会让CEO去做底层代码工作一样。
关键字:STM32 单片机 使能时钟
编辑:什么鱼 引用地址:为什么STM32单片机编程时需要使能时钟
推荐阅读最新更新时间:2023-12-04 07:05
【32位MCU】9G-STM32 简易BOOT及XMODEM串口IAP移植过程简介
9G-STM32 简易BOOT及XMODEM串口IAP移植过程简介
一,准备EWARM + AN2557软件包
1,在http://www.mcu123.com/news/Soft/embsof/arm/201001/514.html 上
下载 IAR Embedded Workbench for ARM version 5.41 (2010.1.5更新) 软件
CD-EWARM-5411-1760_mcu123.zip
http://esoft.mcu123.com/MCU123_temp_20100103@/ARM/CD-EWARM-5411-1760_mcu123.zip
相关文件 IAR
[单片机]
AVR单片机ADC转换程序
//基准定义
#defineAD_ref_vref0x00//基准Vref
#defineAD_ref_avcc0x40//基准AVCC
#defineAD_ref_vref_in0xc0//基准内部Vref
#defineAD_refAD_ref_vref
//常量定义
//单端通道,不放大
#define AD_SE_ADC0 0x00//ADC0
#define AD_SE_ADC1 0x01//ADC1
#define AD_SE_ADC2 0x02//ADC2
#define AD_SE_ADC3 0x03//ADC3
#define AD_SE_ADC4 0
[单片机]
STM32 USART 串口简单使用
STM32 的库实在强大~!函数长的像句子......
好了开始了:
使用查询方式的USART:
设置时钟:
RCC_APB2Periph_AFIO 功能复用IO时钟
RCC_APB2Periph_GPIOA GPIOA时钟
RCC_APB2Periph_USART1 USART1时钟
你可以用
//使能串口1,PA,AFIO总线 RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1,ENABLE);
或直接
RCC_APB2Perip
[单片机]
51单片机定时器工作方式1、2原理详解
写在前面 1.本篇博文旨在帮助那些像我一样刚入门51单片机,如果你对定时器有一定了解,但是其中的的工作方式不能理解,那么这篇文章很适合你,如果你是大神的话…直接绕行吧…… 2.我在学习的过程中由于知识上的不足很多的讲解看不懂,在翻找了许多资料真正理解之后,打算以一种简单易懂的方式进行解释,这是一份很 详尽基础 的讲解手册。 3.全文以定时器0为例,定时器1的用法与其相同。 4.由于是讲定时器实现原理,文章文字显得较多,不过都是很简单的文字,只要认真看都能看得懂。 知识填充 虽然看懂这篇博文不需要太多的知识储备,但是在这里还是做一个简单的知识普及,便于下文的讲解 4位二进制数可以和1位十六进制数相互转化,如二进制
[单片机]
基于51单片机的半导体激光器电源控制系统的设计
半导体激光器(LD)体积小,重量轻,转换效率高,省电,并且可以直接调制。基于他的多种优点,现已在科研、工业、军事、医疗等领域得到了日益广泛的应用,同时其驱动电源的问题也更加受到人们的重视。使用单片机对激光器驱动电源的程序化控制,不仅能够有效地实现上述功能,而且可提高整机的自动化程度。同时为激光器驱动电源性能的提高和扩展提供了有利条件。
1总体结构框图 本系统原理如图1所示,主要实现电流源驱动及保护、光功率反馈控制、恒温控制、错误报警及键盘显示等功能,整个系统由单片机控制。本系统中选用了C8051F单片机。C8051F单片机是完全集成的混合信号系统级芯片(SOC),他在一个芯片内集成了构成一个单片机数据采集或控制
[单片机]
STC15系列单片机-环境监控设备
main.c /** * 产品名称:环境监控设备 * 产品定义: * (1)单片机每隔1秒通过DS18B20温度传感器采集一次温度。 * (2)单片机每隔200毫秒采集一次DS1302时钟芯片的时间。 * (3)通过数码管实时显示时间,格式为日-小时-分-秒。 * (4)通过串口向上位机发送格式提示字符串,设置温度上限和下限; * 格式为xx-yy * (5)可以通过串口设置温度上限和下限。 * (6)单片机将每次采集到的温度实时通过串口传送给上位机; * 如果温度超过阈值,都将给出警告提示。 * 版本:debug * 完成时间:2015.4.5 17:00 * 作者:宁静致远 */ #incl
[单片机]
单片机软件复位和硬件复位的实现和个人总结的区别
微处理器复位方法: 用硬件引脚RESET的复位方法; 用看门狗的复位方法; 自己程序控制的复位方法(本文方法,叫软件复位)。 软件复位实现方法 首先声明一个函数指针,指向复位后要开始执行指令的位置: void (*app_start)(void) = 0x0000; 可以根据具体微处理器复位后的位置,修改后边的地址。 之后,在自己的程序中想复位的地方调用app_start(); 也就是跳到0x0000位置执行指令。 可以根据不同微处理器复位的地址,修改上边的地址(0x0000)。实现上你可以跳到任何位置执行,或调用函数执行。 下图是根据一个项目中用到的软件复位和硬件复位画的流程图,可以说明软件复位和硬件复位的一些区别
[单片机]
USE_STDPERIPH_DRIVER, STM32F10X_HD说明
如果在STM32工程编译时没有添加USE_STDPERIPH_DRIVER, STM32F10X_HD时会出现如下错误:
..\library\cortex_m3\stm32f10x.h(96): error: #35: #error directive: Please select first the target STM32F10x device used in your application (in stm32f10x.h file)
这时候我们需要在 Target Options 中的 C/C++ 选项卡中添加USE_STDPERIPH_DRIVER、STM32F10X_HD。这样才能使编顺利通过。
[单片机]