CH32系列MCU SysTick使用与计算

news/2025/3/11 3:34:22/文章来源:https://www.cnblogs.com/liaigu/p/18237214

1、关于SysTick

CH32F103/203:

CH32F103/203为Cortex-M3内核,SysTick是一个24位的向下递减计数器,计数器每计数一次的时间可配置为1/时基。当SysTick重装载数寄存器的值递减到0的时候,产生一次中断。CH32F系列MCU SysTick由4个寄存器控制,具体如下图。具体介绍可参考《CM3权威指南》

 

CH32V10x_20x_30x:

CH32V系列MCU内核为RISC-V内核,其SysTick为一个64位计数器。与Cortex-M3内核MCU不同,其SysTick可配置为向上计数或向下计数。此外还有一个64位的比较寄存器,当计数器值和比较寄存器值相同时将触发中断服务。

CH32V10x系列MCU SysTick由5个寄存器控制,如下图。具体介绍可参考CH32xRM手册。

https://www.wch.cn/downloads/CH32xRM_PDF.html


CH32V20_30x系列MCU SysTick由6个寄存器控制,如下图。具体介绍可参考CH32FV2x_V3xRM手册。

https://www.wch.cn/downloads/CH32FV2x_V3xRM_PDF.html


2、关于SysTick时基

CH32F10x_20x系列MCU可以配置HCLK或HCLK/8作为时基

CH32V103系列MCU只能配置HCLK/8作为时基

CH32V20x_30x系列MCU可以配置HCLK或HCLK/8作为时基


3、关于SysTick配置
在对SysTick进行初始化配置的时候,需要先对计数模式(即位4)进行配置,再配置计数器初始值更新(位5)和系统计数器使能控制位(位0),否则第一次延时函数可能不生效。
程序配置方式如下:

void Delay_Us(uint32_t n)
{uint32_t i;SysTick->SR &= ~(1 << 0);i = (uint32_t)n * p_us;SysTick->CMP = i;SysTick->CTLR |= (1 << 4);SysTick->CTLR |= (1 << 5) | (1 << 0);while((SysTick->SR & (1 << 0)) != (1 << 0));SysTick->CTLR &= ~(1 << 0);
}

 

4、关于STK_CTLR寄存器位31(SWIE)的作用及用法

作用:用于触发软件中断,具体用法见下图

/* Global Variable */
#define SysTick_CTLR_SWIE          (1 << 31)/********************************************************************** @fn      main** @brief   Main program.** @return  none*/
int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);Delay_Init();USART_Printf_Init(115200);printf("SystemClk:%d\r\n", SystemCoreClock);printf("This is printf example\r\n");NVIC_EnableIRQ(Software_IRQn);
//    NVIC_SetPendingIRQ(Software_IRQn);while(1){SysTick->CTLR |= SysTick_CTLR_SWIE ;Delay_Ms(500);printf("SWIE example\r\n");}
}void SW_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
void SW_Handler()
{SysTick->CTLR &= ~SysTick_CTLR_SWIE;printf("test\r\n");
}

 

5、关于SysTick延时函数时间的计算,以CH32V20x为例

关于SysTick的计数时基,可参考系统计数控制寄存器(STK_CTLR)的位2,默认时基是HCLK/8作为时基,当系统主频为72MHz时,时基为72MHz/8=9000000。当系统主频为144MHz时,时基为144MHz/8=18MHz。

sysTick默认的时基是HCLK/8,HCLK通常就是指系统主频。即时基就是SystemCoreClock/8。那么计数器计数一次的时间就是1/(SystemCoreClock/8)。当系统主频为72MHz时,计数一次的时间为1/9MHz,即1/9us。我们在延时函数初始化中配置p_us = SystemCoreClock/8000000,SystemCoreClock 为72MHz,除以8就是9,9乘以(1/9)正好就是1,同理可得144MHz下结果也是1,因此延时函数不会随着主频改变而改变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/721397.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线安装 qt 下载安装慢以及安装报错无法下载存档 not found——解决方式

一、下载安装QT的在线下载器可以在 QT 官网下载开源的安装包(需要登陆) 或者在各大大学的镜像站中下,比如:mirrors.nju.edu.cn(可选)解压出下载的压缩包,拿到 qt-unified-windows-x64-online.exe/dmg/run 本体在终端中,输入 ./包名 --mirror https://mirror.nju.edu.…

【Linux驱动设备开发详解】11.内存与I/O访问

1.内存管理单元 高性能处理器一般会提供一个内存管理单元(MMU),用于辅助操作系统尽心修改内存管理,提供虚拟地址和物理地址的映射、内存访问权限保护和Cache缓存控制等硬件支持。 1.1MMU基本概念 1.1.1 概念含义 1.TLB(Translation Lookaside Buffer): 旁路转换缓存,TLB是MMU…

OOP第二次博客作业

一、前言 又做了三次PTA练习,前一次还是之前三次的迭代训练,后面两次又是一个新的模型。//终于是换模型了//题目类型都差不多,更注重类与类之间的联系,增加的内容就是对类的设计更复杂了,类的种类也更多了。但总体的逻辑不变。 二、分析第四次判题程序 (1)设计与分析 本…

HTTP Status 400 – Bad Request

1. 问题2. 原因org.apache.juli.logging.DirectJDKLog:log|Error parsing HTTP request headerNote: further occurrences of HTTP header parsing errors will be logged at DEBUG level.java.lang.IllegalArgumentException: Request header is too largeat org.apache.coyot…

使用jmeter,响应体response body中有两个同名的cookies时,如何获取第二个cookie进行跨线程组使用

如图两个同名cookie:.AspNetCore.Cookies正则表达式提取器 引用名称:loginCookie 正则表达式:Set-Cookie: (.AspNetCore.Cookies=.*?;) 模板:$1$(确保正确匹配到第二个 .AspNetCore.Cookies) 匹配数字2beanshell后置处理程序 ${__setProperty(loginCookie,${loginCookie…

IOS 手机 new Date 之后显示的是NaN-NaN-NaN

上周同事让我改一个入参,让用后端返回的时间作为入参,获取视频内容。我习惯成自然,利用了原来的时间格式化函数。函数里面有一个new Date()如下面截图: 部分IOS机型里面,2024-06-07里面的-他识别不出来,他会识别/,所以导致出现NaN-NaN-NaN。 这样的话,还是不要这样直接…

[中文参数] AGFA027R31C2I3V、AGFA027R31C2I3E、AGFA027R31C2E3E、AGFA027R31C2E4X面向互联世界的可编程逻辑产品

Agilex™ 7 F 系列采用Intel 10-nm SuperFin 工艺技术打造而成,提供高达 58 Gbps 的收发器速率、支持多种精度定点和浮点运算的高级 DSP 块,以及高性能的加密块。Agilex™ FPGA 产品组合包含一系列产品,可充分满足每一个技术领域(从边缘到嵌入式系统,再到通信和数据中心)…

美团面试:说说Netty的零拷贝技术?

零拷贝技术(Zero-Copy)是一个大家耳熟能详的技术名词了,它主要用于提升 IO(Input & Output)的传输性能。 那么问题来了,为什么零拷贝技术能提升 IO 性能? 1.零拷贝技术和性能 在传统的 IO 操作中,当我们需要读取并传输数据时,我们需要在用户态(用户空间)和内核态…

视频大模型 Vidu 支持音视频合成;字节跳动推出语音生成模型 Seed-TTS 丨 RTE 开发者日报 Vol.221

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点…

基于 fastflow 的一种工作流框架

Why do we use "reconcile" in Cloud? 让我们思考下在云上为用户提供一种中间件服务,我们需要做什么?按照顺序编排申请各类云资源 —— 网络,S3,K8S,计算,存储 ……。 在 K8S 中自动化部署中间部署 完成各种初始化配置可以想象出看出在 Cloud 上为用户提供服务…

代码高手的过节秘籍:CodeArt Snap帮写代码,灵感弹指间实现

华为云基于大模型技术,学习了1300多万篇经典的技术文档、760亿行精选代码,打造了智能开发助手CodeArts Snap。本文分享自华为云社区《【端午特辑】代码高手的过节秘籍:CodeArt Snap帮写代码,灵感弹指间实现》,作者: 华为云社区精选。 端午将至,粽叶飘香,你却还在为一行…

[GHCTF 2024 新生赛]理想国 flask session伪造

忙着毕业论文几天没做题了。 进入页面发现几个api接口,注册登录搜索登出4个。利用postman访问注册接口注册。可以看到返回了token,利用token访问login。尝试search页面传入file参数试试能不能目录穿越。得到secret-key,这里有个非预期解,访问/proc/1/environ直接得到flag。预…