首页 > 其他分享 >【GD32】---- 移植工程模板

【GD32】---- 移植工程模板

时间:2024-05-06 18:55:07浏览次数:24  
标签:count CTRL systick ---- Msk GD32 SysTick uint32 模板

1 新建模板文件夹

新建一个名叫03_GD32TemplateProject的文件夹,用于建造工程模板
image

2 移植官方库文件

在模板文件夹里新建5个文件夹,分别存放官方库文件和系统驱动文件
image

01_main

存放main函数
image

02_Startup

存放系统启动文件
image

03_System

存放官方的系统文件
image

04_Firmware_PeripheralDriver

存放官方的外设驱动库文件
image
image
image

05_UserDriver

存放用户驱动文件

3 新建keil工程

3.1 安装芯片pack

去官方网站找到对应的资料包:官网资料包
image

安装pack
image

3.2 新建工程

image

选择对应的芯片型号
image

勾选CMSIS内核
image

工程创建完成
image

3.3 添加文件

image

3.4 添加路径

image

4 修改文件

4.1 修改中断文件

打开gd32e23x_it.c文件,拉到最后面,然后删掉Systick_Handler下面的代码
image

4.2 修改systick文件

systick.h

#ifndef SYS_TICK_H
#define SYS_TICK_H

#include <stdint.h>

/* function declarations */
/* configure systick */
void systick_config(void);
/* delay a time in milliseconds */
void delay_1ms(uint32_t count);

/* delay a time in milliseconds */
void delay_ms(uint32_t count);

/* delay a time in microseconds */
void delay_1us(uint32_t count);

/* delay a time in microseconds */
void delay_us(uint32_t count);

#endif /* SYS_TICK_H */

systick.c

#include "gd32e23x.h"
#include "systick.h"

volatile static float count_1us = 0;
volatile static float count_1ms = 0;

/*!
    \brief      configure systick
    \param[in]  none
    \param[out] none
    \retval     none
*/
void systick_config(void)
{
    /* systick clock source is from HCLK/8 */
    systick_clksource_set(SYSTICK_CLKSOURCE_HCLK_DIV8);
    count_1us = (float)SystemCoreClock/8000000;
    count_1ms = (float)count_1us * 1000;
}

/*!
    \brief      delay a time in microseconds in polling mode
    \param[in]  count: count in microseconds
    \param[out] none
    \retval     none
*/
void delay_1us(uint32_t count)
{
    uint32_t ctl;
    
    /* reload the count value */
    SysTick->LOAD = (uint32_t)(count * count_1us);
    /* clear the current count value */
    SysTick->VAL = 0x0000U;
    /* enable the systick timer */
    SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;
    /* wait for the COUNTFLAG flag set */
    do{
        ctl = SysTick->CTRL;
    }while((ctl&SysTick_CTRL_ENABLE_Msk)&&!(ctl & SysTick_CTRL_COUNTFLAG_Msk));
    /* disable the systick timer */
    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
    /* clear the current count value */
    SysTick->VAL = 0x0000U;
}


void delay_us(uint32_t count)
{
    uint32_t ctl;
    
    /* reload the count value */
    SysTick->LOAD = (uint32_t)(count * count_1us);
    /* clear the current count value */
    SysTick->VAL = 0x0000U;
    /* enable the systick timer */
    SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;
    /* wait for the COUNTFLAG flag set */
    do{
        ctl = SysTick->CTRL;
    }while((ctl&SysTick_CTRL_ENABLE_Msk)&&!(ctl & SysTick_CTRL_COUNTFLAG_Msk));
    /* disable the systick timer */
    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
    /* clear the current count value */
    SysTick->VAL = 0x0000U;
}


/*!
    \brief      delay a time in milliseconds in polling mode
    \param[in]  count: count in milliseconds
    \param[out] none
    \retval     none
*/
void delay_1ms(uint32_t count)
{
    uint32_t ctl;
    
    /* reload the count value */
    SysTick->LOAD = (uint32_t)(count * count_1ms);
    /* clear the current count value */
    SysTick->VAL = 0x0000U;
    /* enable the systick timer */
    SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;
    /* wait for the COUNTFLAG flag set */
    do{
        ctl = SysTick->CTRL;
    }while((ctl&SysTick_CTRL_ENABLE_Msk)&&!(ctl & SysTick_CTRL_COUNTFLAG_Msk));
    /* disable the systick timer */
    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
    /* clear the current count value */
    SysTick->VAL = 0x0000U;
}

void delay_ms(uint32_t count)
{
    uint32_t ctl;
    
    /* reload the count value */
    SysTick->LOAD = (uint32_t)(count * count_1ms);
    /* clear the current count value */
    SysTick->VAL = 0x0000U;
    /* enable the systick timer */
    SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;
    /* wait for the COUNTFLAG flag set */
    do{
        ctl = SysTick->CTRL;
    }while((ctl&SysTick_CTRL_ENABLE_Msk)&&!(ctl & SysTick_CTRL_COUNTFLAG_Msk));
    /* disable the systick timer */
    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
    /* clear the current count value */
    SysTick->VAL = 0x0000U;
}

4.3 修改main文件

#include "gd32e23x.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"


int main(void)
{

	while(1)
	{

	}
}

5 编译工程

无错误,模板创建完成
image

6 工程模板点灯测试

6.1 代码

#include "gd32e23x.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"


int main(void)
{
	/* configure systick */
  systick_config();
	
	// 使能GPIOC时钟
  rcu_periph_clock_enable(RCU_GPIOC);
	
	// 设置为推挽输出模式
  gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_13);
  gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13);
	
	// GPIOC_13 设定为高电平
  gpio_bit_set(GPIOC, GPIO_PIN_13);
        
	while(1)
	{
		gpio_bit_toggle(GPIOC, GPIO_PIN_13);
		delay_ms(500);
	}
}

6.2 烧录

选择DAP-link烧录模式
image

点击setting,检查是否识别到芯片
image

无误后开始烧录即可

6.3 实验现象

LED开始正常闪烁

标签:count,CTRL,systick,----,Msk,GD32,SysTick,uint32,模板
From: https://www.cnblogs.com/zxr-blog/p/18175017

相关文章

  • “AI +”让软件研发更高效更安全
    4月27日,百度副总裁陈洋出席由全国工商联主办的第64届德胜门大讲堂,并发表了《深化大模型技术创新与应用落地,护航大模型产业平稳健康发展》主题演讲。陈洋表示,“人工智能+”成为催生新质生产力的重要引擎,对于企业而言,务必要抓住这一重要机遇,一方面,要持续深化大模型技术的创新与应用......
  • ZCMU-1136
    思路一个数学问题要知道1为奇数,2^x次方一定为偶数。偶数=奇数+奇数,而奇数=奇数*奇数,所以x一定要是奇数才可以。注意没告诉范围所以要往大的方向考虑其中1能够被任一整数整除,所以前面加上对1的判断参考(费马小定理)#include<stdio.h>intmain(){inti,n,temp......
  • 人形机器人机械臂和灵巧手的空间感知、物体识别、具体操作的流程图
    下图来自NVIDIA官方的流程图,这里以此作为借鉴:https://developer.download.nvidia.com/images/isaac/isaac-manipulator-simplified-workflow.svg这个流程图的重点就是先对环境和物体进行感知,通过视觉传感器获得RGBD图像,然后判断其6DPose,在这一步的PoseEstimator完成后......
  • MySQL夺命16问,你能坚持到第几问(转)
    原文:https://zhuanlan.zhihu.com/p/5344154091、数据库三大范式是什么?**第一范式:每个列都不可以再拆分。第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。在设计数据库结......
  • Docker-DevOps-入门手册(全)
    DockerDevOps入门手册(全)原文:zh.annas-archive.org/md5/A074DB026A63DFD63D361454222593A5译者:飞龙协议:CCBY-NC-SA4.0前言Docker与DevOps概述了容器化的强大力量以及这种创新对开发团队和一般运营的影响。我们还将了解DevOps的真正含义,涉及的原则,以及通过实施Dock......
  • 数数 题解
    writeby小超手123题意:现在有四种物品,分别有\(n_{1},n_{2},n_{3},n_{4}\)个,有多少种排列物品的方案使得任意两个相邻物品的种类不同。\(n_{1},n_{2}\le200,\\n_{3},n_{4}\le50000\)。分析:可以考虑先把物品\(A,B\)排列好,再把物品\(C,D\)插入进去。需要注意的......
  • [转帖]Release Schedule of Current Database Releases (Doc ID 742060.1)
    https://support.oracle.com/knowledge/Oracle%20Database%20Products/742060_1.html APPLIESTO:OracleDatabase-StandardEdition-Version11.2.0.4andlaterOracleDatabaseCloudService-VersionN/AandlaterGen2ExadataCloudatCustomer-VersionAl......
  • OpenStack-容器手册(全)
    OpenStack容器手册(全)原文:zh.annas-archive.org/md5/D8A2C6F8428362E7663D33F30363BDEB译者:飞龙协议:CCBY-NC-SA4.0前言容器是近年来最受关注的技术之一。随着它们改变了我们开发、部署和运行软件应用程序的方式,它们变得越来越受欢迎。OpenStack因被全球许多组织使用而获......
  • Shell阶段02 shell变量运算(整数运算/小数运算), shell变量案例
    Shell变量运算加减乘除求余num1+num2num1-num2num1*num2num1/num2num1%num2求余整数运算expr$(())$[]let只支持整数运算,不支持小数运算expr数值之间必须要有空格进行分开,当使用*乘的时候,需要对其进行转义使用,不能进行次方运算[root@......
  • 免费电子书下载网站收集(最新版)
    免费 pdfepubmobiawz3txt电子书下载站点收集(freedownload)1、四季图书下载中心:  https://foramu.net/2、艾娃书站  https://evaporsllc.com/ ......