GD32F30x系列---systick基础配置

GD32F30x系列的系统时钟最大运行频率是120MHZ;
打开GD32F30x用户手册,找到系统时钟树,如下图所示:
在这里插入图片描述
可以看到systick时钟通过AHB时钟8分频后作为systick的外部时钟,AHB时钟可以通过预分频设置其频率,最大120MHz。

1、在Application文件夹下的sources文件夹下创建一个systick.c文件,在include文件夹下创建一个systick.h文件。并将文件添加到keil工程中,如下图所示:
在这里插入图片描述
在这里插入图片描述
2,根据系统时钟树,对systick进行初始化,在system_gd32f30x.c文件中已经提供了systick时钟的初始化,因此我们只需要在这里选择相对应的时钟频率即可,使用固件库开发可以大大提高效率,如下图所示:
在这里插入图片描述

//systick.c文件
#include "systick.h"

static uint32_t g_systick=0;//systick时钟变量,每触发一次systick,该变量增加1

/*!
  注SysTick_Config 和 NVIC_SetPriority 函数在m4 的内核头文件中有详细实现,大家可以参考下
配置systick
*/
void systick_config(void)
{
    /*设置systick中断1000Hz,即1ms触发一次中断 */
    if (SysTick_Config(SystemCoreClock / 1000U)){
        /* capture error */
        while (1){
        }
    }
    /* 设置systick中断优先级 */
    NVIC_SetPriority(SysTick_IRQn, 0x00U);
}


/*!
    SysTick 中断函数
*/
void SysTick_Handler(void)
{
   g_systick++;
}


/*!
    延时ms函数,输入延时时间
*/
void delay_1ms(uint32_t count)
{
    uint32_t last_tick=g_systick;
    while((count+last_tick)>g_systick){
    }
}

/*
	获取系统当前的systick
*/
uint32_t systick_get(void)
{
	return g_systick;
}

/*
	获取上次系统的systick到当前系统的systick 距离多久
*/
uint32_t systick_distance_get(uint32_t last_tick)
{
	return (g_systick - last_tick);
}

//systick.h文件
#ifndef SYS_TICK_H
#define SYS_TICK_H

#include "gd32f30x.h" 

void systick_config(void);
void SysTick_Handler(void);
void delay_1ms(uint32_t count);
uint32_t systick_get(void);
uint32_t systick_distance_get(uint32_t last_tick);
#endif /* SYS_TICK_H */

3、在keil工程中main.c文件main函数中调用systick_config函数,如下图所示:
在这里插入图片描述
4、连接好硬件板和电脑后,编译下载程序到硬件板中,点击调试运行,如下图所示:
在这里插入图片描述
5、设置断点在systick中断函数中,查看系统运行是否进入该中断,以及查看g_systick 的值是否1ms增加1次,如下图所示:
在这里插入图片描述
这里可以看到systick中断基本上满足1ms触发一次,说明systick配置成功。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
GD32F30x是一种MCU单片机,具有串口通信功能。在使用GD32F30x进行串口通信时,可以使用固件库中的函数来初始化串口和发送数据。 首先,在main.c文件的main函数中调用串口的初始化函数,并循环调用串口发送函数。可以使用串口调试工具来接收发送的数据。这种方法是通过CPU来发送数据,因此在连续发送200字节的数据时,会消耗一定的CPU时间。 另一种方式是使用DMA模式进行串口通信。同样在main.c文件的main函数中调用串口DMA模式的初始化函数,并循环调用串口DMA发送函数。使用串口调试工具来接收发送的数据。使用DMA模式可以大大节省CPU的开销,在串口收发频繁的情况下尤为有效。 需要注意的是,使用DMA接收数据后,如果需要继续接收,需要重新开启DMA接收。另外,在使用DMA发送数据时,可以观察到系统的systick仍然保持不变,说明使用DMA发送数据基本上不会占用CPU的时间。 因此,GD32F30x可以使用CPU或DMA模式进行串口通信,具体选择哪种方式取决于实际需求和性能要求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [GD32F30x系列MCU单片机固件库GD32F30x_Firmware_Library_V2.1.3.zip](https://download.csdn.net/download/SKCQTGZX/85562969)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [GD32F30x系列---串口通信(USART)基础配置(中断接收模式)](https://blog.csdn.net/weixin_43647919/article/details/128181430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [GD32F30x系列---串口通信(USART)基础配置(DMA模式)](https://blog.csdn.net/weixin_43647919/article/details/128198003)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴同学啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值