前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >102-CH32V307(WCH单片机)学习开发-系统滴答定时器

102-CH32V307(WCH单片机)学习开发-系统滴答定时器

作者头像
杨奉武
发布2022-05-19 13:30:20
1.2K0
发布2022-05-19 13:30:20
举报
文章被收录于专栏:知识分享

说明

系统滴答定时器是系统内核(RISC-V内核)自带的定时器.

有人会问:那后面学到的那些通用定时器,高级定时器呢?

那些都是外设,然后依靠总线(导线)和它通信控制其实现具体功能.

又比如说:单片机有串口功能,实际上就是内核+硬件串口的组合, 内核通过总线控制硬件串口通信.

随便看一个工程

1,官方给了一个不使用中断操作滴答定时器的例子

具体呢不做讨论了,直接使用就可以.

(对于初学者不必深究,即使深究最终也只是配置寄存器而已, 先学会用,然后使用遇到问题时再解决)

现在看中断方式

代码语言:javascript
复制
#include "debug.h"
#include "ch32v30x.h"

volatile uint16_t SysTickCnt=0;

void SysTick_init(void)
{
    /*配置中断优先级*/
    NVIC_InitTypeDef NVIC_InitStructure = {0};
    NVIC_InitStructure.NVIC_IRQChannel = SysTicK_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占式优先级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//响应式优先级
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
    NVIC_Init(&NVIC_InitStructure);

    /*配置定时器*/
    SysTick->CTLR= 0;
    SysTick->SR  = 0;
    SysTick->CNT = 0;
    SysTick->CMP = SystemCoreClock/1000;//后面的1000代表1000HZ(那就是1ms进一次中断)
    SysTick->CTLR= 0xf;
}

__attribute__((interrupt("WCH-Interrupt-fast")))
void SysTick_Handler(void)
{
    SysTick->SR=0;//清除中断
    SysTickCnt++;
}

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置优先级分组为2
    USART_Printf_Init(115200);
    SysTick_init();
    while(1)
    {
        if (SysTickCnt>=1000) {
            SysTickCnt=0;
            printf("1111111111\r\n");
        }
    }
}

下载测试会看到串口每隔1S打印一次数据

上面就是说完了, 我说一下我是如何写的上面的程序

其实没有例程....

但是呢,官方提供了一个FreeRTOS(操作系统)的例子,

大家伙要知道,所有的操作系统都要依靠定时器来切换任务, 一般都是使用系统滴答定时器

我就全局搜索 SysTick_Handler, 然后翻了翻就找到了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
    • 系统滴答定时器是系统内核(RISC-V内核)自带的定时器.
      • 有人会问:那后面学到的那些通用定时器,高级定时器呢?
        • 那些都是外设,然后依靠总线(导线)和它通信控制其实现具体功能.
          • 又比如说:单片机有串口功能,实际上就是内核+硬件串口的组合, 内核通过总线控制硬件串口通信.
          • 随便看一个工程
            • 1,官方给了一个不使用中断操作滴答定时器的例子
              • 具体呢不做讨论了,直接使用就可以.
              • (对于初学者不必深究,即使深究最终也只是配置寄存器而已, 先学会用,然后使用遇到问题时再解决)
          • 现在看中断方式
            • 下载测试会看到串口每隔1S打印一次数据
            • 上面就是说完了, 我说一下我是如何写的上面的程序
              • 其实没有例程....
                • 但是呢,官方提供了一个FreeRTOS(操作系统)的例子,
                  • 大家伙要知道,所有的操作系统都要依靠定时器来切换任务, 一般都是使用系统滴答定时器
                    • 我就全局搜索 SysTick_Handler, 然后翻了翻就找到了
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档