GD32C103RBT6 misc 内核驱动库极简解析

一、概述

gd32c10x_misc.c 是 GD32C10x 固件库的内核杂项驱动,直接操作 Cortex‑M3 内核寄存器,实现三大功能:

  1. NVIC 中断优先级分组、中断开关
  2. 向量表重映射
  3. 低功耗模式、SysTick 时钟源配置所有外设中断配置都依赖本文件,使用频率极高。

二、核心函数说明

1. nvic_priority_group_set()

设置中断优先级分组(抢占优先级 + 子优先级)

  • 常用:NVIC_PRIGROUP_PRE2_SUB2(2 位抢占 + 2 位子优先级,默认)
  • 整个工程只调用一次,放在 main 最开头

2. nvic_irq_enable()

开启指定中断并配置优先级

  • 参数:中断号、抢占优先级、子优先级
  • 优先级数值越小,优先级越高

3. nvic_irq_disable()

关闭指定中断

4. nvic_vector_table_set()

向量表重映射(FLASH/RAM,IAP 升级常用)

5. system_lowpower_set / reset()

设置 / 清除睡眠、深度睡眠低功耗模式

6. systick_clksource_set()

配置 SysTick 时钟源:HCLK 或 HCLK/8

三、例程

#include "gd32c10x_misc.h"

int main(void)

{

// 1. 设置中断分组

nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);

// 2. 开启外部中断0,抢占优先级1,子优先级0

nvic_irq_enable(EXTI0_IRQn, 1, 0);

// 3. SysTick时钟源配置

systick_clksource_set(SYSTICK_CLKSOURCE_HCLK_DIV8);

while(1)

{

}

}

// EXTI0中断服务函数

void EXTI0_IRQHandler(void)

{

if(exti_interrupt_flag_get(EXTI_0) != RESET)

{

exti_interrupt_flag_clear(EXTI_0);

// 中断业务逻辑

}

}

相关推荐
小+不通文墨33 分钟前
使用vscode里的U8G2 库编写OLED菜单控制
经验分享·笔记·单片机·嵌入式硬件·学习
oshan20121 小时前
零基础STM32入门教程--12-I2C 串行通迅
stm32·单片机·嵌入式硬件
Messy create2 小时前
【继续充值】
单片机
茯苓gao2 小时前
从零开发 EtherCAT 主站(六):SOEM 初始化流程详解,主站是如何发现所有从站的?
笔记·嵌入式硬件·学习·信息与通信
智购科技无人售货机工厂2 小时前
2026自动售货机防拆机物理安全设计:从安全螺丝到结构互锁的工程实践~YH
android·网络·驱动开发·python·单片机·安全·云原生
从零开始的嵌入式之旅2 小时前
day33
linux·c语言·经验分享·笔记·嵌入式硬件
RedJACK~2 小时前
Windows11一级右键菜单添加Alacritty教程
单片机·嵌入式硬件
智闲电子设计3 小时前
STM32 DAC 实战:用 DMA 把定时器表变成波形,自制信号发生器
stm32·单片机·嵌入式硬件
zcmodeltech3 小时前
反应装置模型控制系统设计与实现:多设备协同联动方案
java·网络·数据库·stm32·嵌入式硬件·能源·制造
深圳市恒锐丰科技杨生3 小时前
CL4054HL 36V 耐压 600mA 单节锂电池线性充电芯片|SOT23‑5 小型便携充电方案
嵌入式硬件·硬件工程