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

news/2024/10/7 18:21:52

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开始正常闪烁

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

P9527 [JOISC2022] 洒水器 题解

P9527 [JOISC2022] 洒水器 题解。题目传送门 以下设 \(\operatorname{dis}(x,y)\) 表示树上 \(x,y\) 两点间的距离。修改时对 \(u\) 的周围与 \(u\) 距离小于等于 \(d\) 的点的点权乘 \(w\)。暴力不行,于是考虑打标记。 注意到 \(0\le d\le 40\),一个很自然的想法是:设 \(ta…

OpenStack-容器手册(全)

OpenStack 容器手册(全)原文:zh.annas-archive.org/md5/D8A2C6F8428362E7663D33F30363BDEB 译者:飞龙 协议:CC BY-NC-SA 4.0前言 容器是近年来最受关注的技术之一。随着它们改变了我们开发、部署和运行软件应用程序的方式,它们变得越来越受欢迎。OpenStack 因被全球许多组…

MySQL夺命16问,你能坚持到第几问(转)

原文:https://zhuanlan.zhihu.com/p/534415409 1、数据库三大范式是什么?** 第一范式:每个列都不可以再拆分。 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主…

Docker-DevOps-入门手册(全)

Docker DevOps 入门手册(全)原文:zh.annas-archive.org/md5/A074DB026A63DFD63D361454222593A5 译者:飞龙 协议:CC BY-NC-SA 4.0前言 Docker 与 DevOps 概述了容器化的强大力量以及这种创新对开发团队和一般运营的影响。我们还将了解 DevOps 的真正含义,涉及的原则,以及…

07. C语言程序执行流程控制

【有条件执行语句】 if esle 语句 if else 语句根据一个条件确定是否执行一段代码,执行条件是一个布尔值,布尔值为true则执行,为false则不执行,同时可以设置不符合条件时执行的语句。 if(执行条件) {符合条件时执行的代码; } else {不符合条件时执行的代码; } 使用事项:1.…

用蒙特卡罗方法求积分

实验任务 采用 Monte-Carlo 法计算函数 y=x2 在 0~10 之间的积分值 实验目的 熟悉 MPI_Reduce() 函数的用法 实验方法 该算法的思想是通过随机数把函数划分成小的矩形块,通过求矩形块的面积和来求积分值,我们生成 n 个 0~10 之间的随机数,求出该随机数所对应的函数值作为矩…

Kafka源码分析(四) - Server端-请求处理框架

Kafka源码分析,侧重于请求处理框架系列文章目录 https://zhuanlan.zhihu.com/p/367683572 一. 总体结构 先给一张概览图:服务端请求处理过程涉及到两个模块:kafka.network和kafka.server。 1.1 kafka.network 该包是kafka底层模块,提供了服务端NIO通信能力基础。 有4个核心…