历史上的今天
今天是:2024年12月25日(星期三)
2018年12月25日 | stm32f103 学习笔记 —— 05 使用SysTick实现硬件延时
2018-12-25 来源:eefocus
SysTick定时时间计算(当系统时钟为72M时)
t =重载*(1 / Clk)
Clk = 72M时,t =(72)*(1 / 72M)= 1 us
Clk = 72M时,t =(72000)*(1 / 72M)= 1ms
1s = 1000ms = 1000 000 us = 100 000 000 ns
当系统定时器中断与外设中断进行优先级比较时,只需要把内核外设的中断优先级的四个位按照外设的中断优先级来分组解析即可,即人为的分出抢占优先级和子优先级
SysTick_Config()函数
//这个固件库函数在core_com3.h中
静态__INLINE uint32_t SysTick_Config(uint32_t ticks)
{
//重载寄存器为24位,最大值为2 ^ 24
如果(滴答> SysTick_LOAD_RELOAD_Msk)返回(1);
//配置重装寄存器的初始值
SysTick-> LOAD =(ticks&SysTick_LOAD_RELOAD_Msk) - 1;
//配置中断优先级为15,优先级为最低
NVIC_SetPriority(SysTick_IRQn,(1 << __ NVIC_PRIO_BITS) - 1);
//配置计数器计数器的值
SysTick-> VAL = 0;
//配置系统定时器的时钟为72M
//使能中断
//使能系统定时器
SysTick-> CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk;
返回(0);
}
延时函数(软件检测 - 判断计数器的数值)
void SysTick_Delay_us(uint32_t us)
{
我uint32_t我;
SysTick_Config(72);
对于(I = 0; I <我们;我++)
{
while(!((SysTick-> CTRL)&(1 << 16)));
}
SysTick-> CTRL&=〜SysTick_CTRL_ENABLE_Msk;
}
延时函数(利用中断服务函数)
静态__IO u32 TimingDelay;
/ **
* @brief启动系统滴答定时器SysTick
* @param无
* @retval无
* /
void SysTick_Init(void)
{
/ * SystemFre * quency / 1000 1ms中断一次
* SystemFrequency / 100000 10us中断一次
* SystemFrequency / 1000000 1us中断一次
* /
//如果(SysTick_Config(SystemFrequency / 100000))// ST3.0.0库版本
如果(SysTick_Config(SystemCoreClock / 100000))// ST3.5.0库版本
{
/ *捕捉错误* /
而(1);
}
}
/ **
* @brief us延时程序,10us为一个单位
* @参数
* @arg nTime:Delay_us(1)则实现的延时为1 * 10us = 10us
* @retval无
* /
void Delay_us(__ IO u32 nTime)
{
TimingDelay = nTime;
//使能滴答定时器
SysTick-> CTRL | = SysTick_CTRL_ENABLE_Msk;
while(TimingDelay!= 0);
}
/ **
* @brief获取节拍程序
* @param无
* @retval无
* @注意在SysTick中断函数SysTick_Handler()调用
* /
void TimingDelay_Decrement(void)
{
如果(TimingDelay!= 0x00)
{
TimingDelay--;
}
}
史海拾趣
|
我搜了一些做ARM开发板的公司,甚少有支持wince6.0的开发板在卖。立宇泰、友善之臂、扬创、周立功、英蓓特等都没找到一块。优龙也是在最近才出了一款LPC3250的板子有wince6.0,但是驱动还没有做全。搜到有两家卖S3C6410X和S3C6400开发板的公司,海 ...… 查看全部问答> |
|
BUILDREL: Copying PLATFORMCOMMON binaries from C:\\WINCE600\\platform\\common Can\'t create hard link. (FAT file system?) Copying files instead of creating hard links. 编译到最后的时候,出现这样几个错误?? 这是什么 ...… 查看全部问答> |
|
我有个动态链接库,头文件里定义了结构体和函数名 struct FvFixed { CString m_str; public: friend FvFixed const operator+(const FvFixed x, const ...… 查看全部问答> |
|
急需此两题的解答!小弟多年不碰单片机,两眼一抹黑,请各位大大救命啊! 在线等,解出来立刻双手把分奉上!! 邮箱:[email=darkstarxw@163.com][/email]… 查看全部问答> |
|
1、模拟量值和A/D转换值的转换假设模拟量的标准电信号是A0—Am(如:4—20mA),A/D转换后数值为D0—Dm(如:6400—32000),设模拟量的标准电信号是A,A/D转换后的相应数值为D,由于是线性关系,函数关系A=f(D)可以表示为数学方程: &nb ...… 查看全部问答> |
|
最近在学习使用STM32的ADC,单ADC已经调试成功了,LCD可以显示实际波形。 看到有双ADC快速交替模式,可以提高一倍的速度,就改为该模式,用二个ADC采样同一个输入。 但是无论如何都调试不出来,只有ADC1的值,没有ADC2的值。 看了论坛几乎 ...… 查看全部问答> |
|
各位大虾:我在DM642里面对TLV320AIC23进行Transmit操作时,遇到一个问题。代码如下,各同步时钟信号AFSX、ACLKX、AHCLKX由AIC23提供。 MCASP_ConfigSrctl MysrctlRegs = { 0x00000009, //AXR00=Xmt &nbs ...… 查看全部问答> |




