大家好,欢迎来到IT知识分享网。
1 新建模板文件夹
新建一个名叫03_GD32TemplateProject的文件夹,用于建造工程模板
2 移植官方库文件
01_main
02_Startup
03_System
04_Firmware_PeripheralDriver
05_UserDriver
存放用户驱动文件
3 新建keil工程
3.1 安装芯片pack
3.2 新建工程
3.3 添加文件
3.4 添加路径
4 修改文件
4.1 修改中断文件
4.2 修改systick文件
systick.h
/ * * * @file systick.h * @author GD32 * @brief * * * @copyright Copyright (c) 2024 GD32 * */ #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_ms(uint32_t count); /* delay a time in microseconds */ void delay_us(uint32_t count); #endif /* SYS_TICK_H */
systick.c
/ * * * @file systick.c * @author GD32 * @brief 通过 SysTick 定时器进行微秒级别和毫秒级别的延时函数 * * * @copyright Copyright (c) 2024 GD32 * */ #include "gd32e23x.h" #include "systick.h" volatile static float count_1us = 0; volatile static float count_1ms = 0; / * * @brief 配置 SysTick 定时器 * * * */ void systick_config(void) {
//设置了 SysTick 定时器的时钟源为 HCLK/8 systick_clksource_set(SYSTICK_CLKSOURCE_HCLK_DIV8); //计算了每微秒所需的 SysTick 计数值 count_1us = (float)SystemCoreClock/; //计算了每毫秒所需的 SysTick 计数值 count_1ms = (float)count_1us * 1000; } / * * @brief delay_us 微秒延时函数 * * @param[in] count 微秒值 * * */ void delay_us(uint32_t count) {
uint32_t ctl; //设置 SysTick 计数器的装载值 SysTick->LOAD = (uint32_t)(count * count_1us); //清零 SysTick 计数器,以确保计数器从零开始计数 SysTick->VAL = 0x0000U; //使能 SysTick 定时器,开始进行计数 SysTick->CTRL = SysTick_CTRL_ENABLE_Msk; //等待 SysTick 计数器的计数值达到装载值时退出 do {
ctl = SysTick->CTRL; //读取 CTRL 寄存器的值 }while((ctl & SysTick_CTRL_ENABLE_Msk)&&!(ctl & SysTick_CTRL_COUNTFLAG_Msk)); //循环退出,禁用 SysTick 定时器 SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; //将 SysTick 计数器的当前值清零,以便下次使用 SysTick->VAL = 0x0000U; } / * * @brief delay_ms 毫秒延时函数 * * @param[in] count 毫秒值 * * */ void delay_ms(uint32_t count) {
uint32_t ctl; //设置 SysTick 计数器的装载值 SysTick->LOAD = (uint32_t)(count * count_1ms); //清零 SysTick 计数器,以确保计数器从零开始计数 SysTick->VAL = 0x0000U; //使能 SysTick 定时器,开始进行计数 SysTick->CTRL = SysTick_CTRL_ENABLE_Msk; //等待 SysTick 计数器的计数值达到装载值时退出 do {
ctl = SysTick->CTRL; //读取 CTRL 寄存器的值 }while((ctl&SysTick_CTRL_ENABLE_Msk)&&!(ctl & SysTick_CTRL_COUNTFLAG_Msk)); //循环退出,禁用 SysTick 定时器 SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; //将 SysTick 计数器的当前值清零,以便下次使用 SysTick->VAL = 0x0000U; }
4.3 修改main文件
/ * * * @file main.c * @author GD32 * @brief * * * @copyright Copyright (c) 2024 GD32 * */ #include "gd32e23x.h" #include "systick.h" #include <stdio.h> #include "main.h" / * * @brief 主函数main * * * @return * */ int main(void) {
while(1) {
} }
5 编译工程
6 工程模板点灯测试
6.1 代码
/ * * * @file main.c * @author GD32 * @brief * * * @copyright Copyright (c) 2024 GD32 * */ #include "gd32e23x.h" #include "systick.h" #include <stdio.h> #include "main.h" / * * @brief 主函数main * * * @return * */ int main(void) {
//设置 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 烧录
点击setting,检查是否识别到芯片
无误后开始烧录即可
6.3 实验现象
LED开始正常闪烁
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/117814.html




