STM32的新手,一般都会对一个问题很纠结。我也是,就是所谓的”时钟问题“。我们在尽心STM32编程时,会痛苦地发现这样一个事实:不管你要干嘛,你首先要做的一件事就是使能时钟。而且可能每一次的时钟还是不同的。
你就会问:为什么要使能时钟?为什么每次使能的时钟还不一样呢?为什么51单片机中没有这些鬼?在学51单片机的时候,基本上接触不到I/O方向和外设时钟的概念,I/O想输入就直接读,想输出就直接赋值,串口、AD转化、外部中断等等也都是想用就用,不需要单独配置时钟。这样在初学时的确方便了很多,不需要有乱七八糟的设置就能让芯片跑起来,但是随之带来的就是所谓的功耗问题。但是作为初学者,谁还管这个啊?能让程序跑起来就已经让我们兴奋得几个晚上睡不着觉了。说这话不太合适,但事实上很多芯片生产厂
可是随着电子产品集成度越来越高,功耗和发热越来越严重,芯片厂商非常无奈也在开始想办法避免这个问题,而最直接的思路当然就是用多少功能就使能多少功能,对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。如果不用的就完全关闭,尽可能降低芯片功耗,所以就出现了这么多的时钟和IO配置。说白了,时钟的功能就好像是一个小开关,你要用什么寄存器就先对应的打开开关,即:使能对应的时钟。
实际上,在这里面还涉及到一个时钟门控技术,而这又涉及到同步电路,我们都知道(默认你们都知道)在同步电路中总是有一个时钟控制。这里我就不赘述了,如果你和我一样是一个强迫症患者,请你回去翻翻一本叫《数字电子技术基础》的书,你一定可以找到答案的,相信我吧。
到这里你就差不多能够理解为什么STM32编程需要不断地使能时钟了,因为默认情况下这些时钟都是disable的。你要使用它,当然需要enable了。因为:寄存器是由D触发器组成的,只有送来了时钟,触发器才能被改写值,这样寄存器才能工作。只不过,在51单片机一个时钟系统把一切都包了,在STM32中,我们很明确地做好了分工,让大家各司其职,其实这样还有一个好处就是,不是每个外设都需要系统时钟那么高的频率,就好像是:哪个公司会让CEO去做底层代码工作一样。
STM32有好多时钟主要应用的有以下几种:
一、 STM32 通用定时器简述
①STM32 的通用定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成。STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。
②、STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能包括:
1)16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。
2)16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~
65535 之间的任意数值。
3)4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:
A.输入捕获
B.输出比较
C.PWM 生成(边缘或中间对齐模式)
D.单脉冲模式输出
4)可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外
一个定时器)的同步电路。
5)如下事件发生时产生中断/DMA:
A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
C.输入捕获
D.输出比较
E.支持针对定位的增量(正交)编码器和霍尔传感器电路
F.触发输入作为外部时钟或者按周期的电流管理
由于 STM32 通用定时器比较复杂,这里我们不再多介绍,请大家直接参考《STM32 参考
手册》第 253 页,通用定时器一章。
二、 systick定时器简述
systick 定时器是包含在 Cortex-M3 内核里面,它是捆绑在 NVIC 中。它
是 24 位倒计数的定时器,当定时器计数到 0 的时候,将从 RELOAD 寄存器中自动重 装定时器初值,如果开启中断的话,同时它还是产生异常中断信号。 我们知道,定时器还必须要有一个时钟来驱动,而 systick 定时器的时钟来源 是来自系统时钟,不过它的时钟可以选择成直接取自系统时钟,还可以将系统时 钟8 分频之后再赋给 systick 定时器。一般用来设计精准延时函数。
三、通用定时器初始化
初始化函数
/****************************************
* 函 数 名 : time_init
* 函数功能 : 定时器 3 端口初始化函数
* 输 入 : 无
* 输 出 : 无
**************************************/
void time_init()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //声明一个结
构体变量,用来初始化 GPIO
NVIC_InitTypeDef NVIC_InitStructure;
/* 开启定时器 3 时钟 */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除 TIMx 的中断待处理位:TIM 中断源
TIM_TimeBaseInitStructure.TIM_Period = 2000;//设置自动重装载寄存器周期的值
TIM_TimeBaseInitStructure.TIM_Prescaler = 35999;//设置用来作为 TIMx时钟频率预分频值,100Khz 计数频率
TIM_TimeBaseInitStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseInitStructure.TIM_CounterMode =TIM_CounterMode_Up;//TIM 向上计数模式
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
TIM_Cmd(TIM3,ENABLE); //使能或者失能 TIMx 外设
/* 设置中断参数,并打开中断 */
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE ); //使能或者失能指定的TIM 中断
/* 设置 NVIC 参数 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //打开 TIM3_IRQn 的全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //抢占优先级为 0
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; //响应优先级为 1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
NVIC_Init(&NVIC_InitStructure);
}
2) 定时器中断 函数
void TIM3_IRQHandler() //定时器 3 中断函数
{
static u8 i=0;
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
GPIO_Write(GPIOC,(u16)~(0x01<
if(i==8)i=0;
}0
上一篇:STM32 can配置PA11 PA12
下一篇:stm32单片机时钟理解
推荐阅读
史海拾趣
进入21世纪,超霸电池继续加大技术研发力度,推出了Recyko绿再系列高端绿色充电套装。这一系列产品不仅外观时尚、性能卓越,还实现了快速充电、低自放电等先进技术。其中,“十分充”产品更是将充电速度提升到了前所未有的高度,仅需10分钟即可将电池电量从0充至90%以上。Recyko绿再系列的成功推出,不仅为超霸电池赢得了更多用户的青睐,也推动了整个电池行业的技术进步。
在20世纪80年代初,随着计算机技术的飞速发展,对于高性能、低功耗的半导体器件需求日益增长。在这样的背景下,一家名为“先进微电子”(Advanced Micro Devices, AMD)的公司开始专注于CMOS技术的研发。AMD的工程师们通过不断的实验和优化,成功推出了首款高性能CMOS处理器,这款处理器以其卓越的性能和稳定性迅速获得了市场的认可。随着技术的不断进步,AMD在CMOS领域持续创新,逐步发展成为全球知名的半导体企业。
Data Translation一直以客户为中心,致力于为客户提供优质的产品和服务。公司不断创新产品设计和制造技术,以满足客户对数据采集和处理性能、稳定性、易用性等方面的需求。同时,公司还建立了完善的客户服务体系,为客户提供从产品咨询、选型、安装、调试到售后维护等全方位的服务。这些举措赢得了客户的广泛赞誉和信任,为公司赢得了更多的市场份额和声誉。
面对日新月异的电子科技行业,Ecera Comtek Corp公司深知只有持续创新才能保持领先地位。因此,公司不断加大对新技术、新产品的研发投入,积极探索新的商业模式和市场机会。同时,Ecera Comtek Corp公司还积极引进外部创新资源,与高校、科研机构等建立紧密的合作关系,共同推动电子科技行业的发展。在Ecera Comtek Corp公司的引领下,电子科技行业正朝着更加智能、高效、环保的方向发展。
请注意,以上故事均基于虚构情节,旨在模拟Ecera Comtek Corp公司可能的发展经历。如有雷同,纯属巧合。
随着公司的不断发展和壮大,Advanced Analog开始积极拓展国际市场。公司在全球范围内设立了多个分支机构和销售网络,与众多国际知名企业和品牌建立了长期稳定的合作关系。通过参与国际电子展会和交流活动,Advanced Analog的产品和技术得到了更广泛的认可和赞誉,进一步提升了公司在国际市场的知名度和影响力。
在市场竞争日益激烈的今天,Dau Semiconductor Inc公司深知只有不断创新和升级技术,才能保持市场竞争力。因此,公司不断加大对研发的投入,引进先进的设备和人才,探索新的技术方向。近年来,公司成功研发出了多款具有创新性的半导体芯片产品,如基于人工智能技术的智能芯片、基于物联网技术的低功耗传感器芯片等。这些产品的推出,不仅为公司带来了更多的商业机会,也为行业的发展注入了新的活力。
概述:介绍一种基于FPGA的可编程电压源系统的设计与实现。采用FPGA为控制芯片,应用QuartusⅡ软件和硬件描述语言为工具,通过数/模转换和运放把数字信号转换成模拟电压信号。实验表明,该系统操作灵活方便,稳定性强,调压精度高,电压可调范围大( ...… 查看全部问答∨ |
|
大家好,我刚买了一块飞凌的ok2440III开发板。我照着它里面的那个ADS的使用说明来建立工程,最后make的时候还不能通过,弹出Entry point (0x32000000) lies outside the image的错误提示。后来,我参考了一些别的资料,把RO_base的值从0改为0x32000 ...… 查看全部问答∨ |
主芯片是三星6410, LCD 接口屏一块, CPU接口屏一块(或称I80 接口 或 MCU 接口) 同一块板上, 先后分次, 在EBoot 中,我往 帧缓冲区的地址 写数据(或复制图片). LCD 接口屏 可显示图片,并启动系统. CPU 接口屏 不显示图片,但启动系统(从串口 ...… 查看全部问答∨ |
我把PB5.0的补丁安装后,将.net2.0内置,生成nk.bin后,用超级终端安装后自动启动是正常 的,可是关了机后,再开,就会停在LOGO画面上不动了,大侠,给点提示吧… 查看全部问答∨ |
|
我下载的 iar 4.41版本 好像不支持stm32 iar现在有支持STM32的版本吗 不太喜 ...… 查看全部问答∨ |
|
电路如图,基准电压为1.5V,输入源用62MHz晶振,测得输入Q不是方波;当输入为频率低于7MHz信号源时,输出Q为方波。请指教这个电路有没有问题,有谁知道MAX999的工作最大频率是多少?… 查看全部问答∨ |