利用系统sysTick()时钟产生延时函数Delay_ms()的分析
SysTick 定时器, SysTick 是一个 24 位的倒计数定时器,当计数到 0 时,将从
RELOAD 寄存器中自动重装载定时初值,开始新一轮计数。只要不把它在 SysTick 控制及状态寄存器中的使能位清除,就永不停息。 sysTick时钟来自系统时钟的8倍频。
一般作用于操作系统的节拍,此处我们可以依据此定时器作为延时函数。
/**
* @brief Inserts a delay time.
* @param nTime: specifies the delay time length, in milliseconds.
* @retval None
*/
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
/**
* @brief Decrements the TimingDelay variable.
* @param None
* @retval None
*/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
/**
* @brief This function handles SysTick Handler.
* @param None
* @retval None
*/
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
1. // SystemFrequency / 1000 1ms中断一次
2. // SystemFrequency / 100000 100ms中断一次
3. // SystemFrequency / 1000000 1中断一次
SysTick_Config(SystemCoreClock / 1000) 延时1ms时需要加上此局
补充: 粗略微秒级别延时函数
void delay_us(u16 time)
{
u16 i= 0;
while(time--)
{
i=105; //此处数值可以依据不同的晶振自行设置(我的频率是72M 此处数值适用于1ms以下的us级延时,需要毫秒级延时可以使用SysTick定时器更加准确)
while(i--);
}
}
关键字:STM32 SysTick 滴答时钟分
引用地址:
STM32 SysTick滴答时钟分析
推荐阅读最新更新时间:2024-03-16 16:11
为何修改BASEPRI寄存器无效?
有STM32用户发现在操作BASEPRI特殊功能寄存器时,根本不起作用。比方,它目前配置了几个中断,优先级各不相同,按照STM32CubeMx里的配置分别为2、3、4不等,当他在BASEPRI寄存器里写这几个数字中的任意一个时,发现BASEPRI的数字始终是0,没有任何效果。 我们知道,通过配置 BASEPRI寄存器非0值来给系统中的中断响应设置门槛,当中断优先级低于某个级别时将不会得到CPU的响应执行,也就是说只有中断优先级高于某个级别时才能得到响应。下面截图是来自ARM CORTEX M4技术手册中有关BASEPRI寄存器的描述。 从这里可以看到该寄存器的有效配置位有8位,对其写0无意义,或者说放弃设置中断响应门槛功
[单片机]
STM32中的SAR ADC是怎么一回事
STM32中的ADC是逐次逼近型ADC(Successive Approximation ADC),是逐个产生比较电压Vref,并逐次与输入电压分别比较,以逐渐逼近的方式进行A/D转换的。而其中的用来产生Vref的电路就是DAC电路。因此一般DAC电路比较容易设计,而DAC在采样速度和精度的权衡上会比较复杂。 SAR ADC的转换原理是把输入的模拟信号按规定的时间间隔采样(采样),并与一系列标准的数字信号相比较,数字信号逐次收敛,直至两种信号相等为止(量化完成),最后输出代表此信号的二进制数(编码)。 SAR ADC结构 结构上主要包括采样保持电路(S/H),比较器(COMPARATOR,COMP),SAR逻辑控制电路、时
[单片机]
STM32 RVMDK JLINK下flash和RAM调试方法
stm32f107vc开发板,uvision V4.00u,JLINK V8,J-Link ARM V4.08l。 flash 下调试方法: 1.打开要调试的工程,左栏工程上右击options for target。进入debug中选择jlink. 2. utility中选择jlink. 3. 用JLINK连接PC和开发板,打开开发板电源。进入旁边的settings,添加flash烧写方法。 4。一路OK回去,rebuild,ctrl+F5进入调试,可以单步和断点。根据ST公司的reference manual 2.3.3 embedded flash,知道flash的地址从0x0800 0000开始。在调试窗口
[单片机]
stm32的DMA1通道一览表,stm32使用DMA的相关操作
DMA(Direct Memory Access)常译为“存储器直接存取”。早在Intel的8086平台上就有了DMA应用了。 一个完整的微控制器通常由CPU、存储器和外设等组件构成。这些组件一般在结构和功能上都是独立的,而各个组件的协调和交互就由CPU完成。如此一来,CPU作为整个芯片的核心,其处理的工作量是很大的。如果CPU先从A外设拿到一个数据送给B外设使用,同时C外设又需要D外设提供一个数据。。。这样的数据搬运工作将使CPU的负荷显得相当繁重。 严格的说,搬运数据只是CPU的比较不重要的一种工作。CPU最重要的工作室进行数据运算,从加减乘除到一些高级的运算,包括浮点、积分、微分、FFT等。CPU还需要负责复杂的中断
[单片机]
STM32 USB 大容量存储器Mass Storage工程的讲解
程序可以兼容官方推出来的不同系列的评估版,所以程序里经常看见类似于#ifdef STM32L1XX_MD、#ifdef USE_STM3210E_EVAL这样的宏开关语句,甚至随工程附带了两个版本的库文件,这也照成了程序理解和调试的困难。 工程随带了两个库文件:STM32F10x_StdPeriph_Driver和STM32F1xx_StdPeriph_Driver。我们当然只能选一个了,比如手我们选择 STM32F1xx_StdPeriph_Driver,只要点击该组,右键- option for Group....,钩上iinclude in Target 和always build,就可以,另一个库文件组,钩掉这两个选项就可
[单片机]
STM32的GPIO口工作的八种模式
一。输入模式 1. 浮空输入 浮空输入模式下,上拉和下拉两个开关断开,高或低电平通过施密特触发器到达输入数据寄存器,CPU可以通过读取输入数据寄存器从而读取到外部输入的高低电平值。 2. 输入上拉模式 上拉电阻开关连上,上拉电阻的阻值为30k-50k。 3. 输入下拉模式 下拉电阻开关连上。 4. 模拟输入模式 模拟输入方式时外部信号为模拟量,不是高低电平。 注意信号没有经过施密特触发器。 另外上拉下拉都无效。
[单片机]
简化和加快最终产品开发速度,STM32 探索套件问市
为了简化物联网节点开发者面临的复杂软件的开发难题,意法半导体推出了B-L4S5I-IOT01A STM32探索套件。新套件包含经过相关标准认证的FreeRTOS™操作系统编程接口,该编程接口完全集成在STM32Cube开发生态系统内,可直连亚马逊云服务Amazon Web Services (AWS)。 硬件工具包括一块STM32L4+微控制器开发板,板载意法半导体的各种MEMS传感器,以及STSAFE-A110安全单元、Bluetooth® 4.2 模块、Wi-Fi®模块,以及用于低功耗上云的有印刷天线的NFC标签。配备了X-CUBE-AWS v2.0 STM32Cube Expansion Pack软件包,该开发套件
[单片机]
STM32速成笔记(3)—按键检测
一、按键 检测 原理 按键检测原理比较简单,按键按下和不按下,其连接引脚的电平是不一样的,按键检测正是通过检测按键引脚的电平变化来实现的。比如按键未按下时引脚电平为高电平,按键按下后为低电平。我们在检测按键时只需要检测按键引脚是否变为低电平来确定按键是否按下。 二、 硬件 连接 按键的硬件连接决定了我们在配置按键IO时IO的状态。以我们使用的普中核心板为例,上面有三个按键 普中核心板按键硬件电路图 其中K1一端接VCC,另一端接单片机。K2和K3一端接地,另一端接单片机。硬件电路不同,导致他们在进行按键检测时IO的配置不同。 针对K1这种按键电路,按键按下时, 单片机 的引脚接到VCC,因此在未按下的情况下该引脚的默认电平
[单片机]