STM32/STM8技术william hill官网
登录
直播中
123
6年用户
4经验值
擅长:控制/MCU
私信
关注
[问答]
Systick相关寄存器和库函数的疑惑
开启该帖子的消息推送
寄存器
库函数
初学者,想请教一下各位,
1、Sys
ti
ck控制及状态寄存器中COUNTFALG的描述:如果在上次读取本寄存器后,SysTick已经数到了0,则该位为1。如果读取该位,该位将自动清零。
而SysTick当前值寄存器中CURRENT的描述:写它则使之清零,同时还会清除在SysTick控制及状态寄存器中的COUNTFLAG标志。
那
COUNTFALG是在被读取为1后自动清零还是在CURRENT被清零后,
COUNTFALG随之被清零的呢?还是两个情况下它都被清零了?
2、为什么下面这个程序段最后一行要清空计数器呢?计数器不应该经过该程序段后已经为0了吗?
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us;
//时间加载
SysTick->VAL=0x00;
//清空计数器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16)));
//等待时间到达
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
SysTick->VAL =0X00;
//清空计数器
}
3、以及
SysTick_Config
(uint32_t ticks)函数中
SysTick->LOAD = ticks - 1; 初值设定为tick-1,
为什么要减一
呢?
STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
SysTick->LOAD = ticks - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */
SysTick->VAL = 0; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return (0); /* Function successful */
}
已退回
1
积分
更多回帖
rotate(-90deg);
回复
相关问答
寄存器
库函数
Systick
相关
寄存器
库函数
是什么?
2021-11-24
787
怎么通过
库函数
来实现
相关
寄存器
的配置
2021-08-11
1160
STM32的
库函数
/
寄存器
/位是什么
2021-11-29
776
求
库函数
的
SysTick
延时程序?
2020-06-14
1156
库函数
编程是不是非常方便
2015-08-04
2236
Systick
有哪些
寄存器
?
2021-11-24
846
_
SysTick
_Config()
函数
里_
SYSTICK
_PRI
寄存器
功能是什么?
2023-01-30
1209
3.5固件库怎么不能用
SysTick
_CounterCmd
函数
使能和失能
SYSTICK
定...
2014-08-03
7139
如何把
库函数
写的文件和
寄存器
写的文件结合起来用?
2019-08-07
1830
新手对于
库函数
与
寄存器
的理解.欢迎批评
2017-07-16
3728
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分