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);

// 中断业务逻辑

}

}

相关推荐
清风6666668 小时前
基于单片机与DAC0832的双路波形信号发生系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
azwsm9 小时前
电路元器件和GPIO控制器
单片机·嵌入式硬件
kebidaixu12 小时前
FreeRTOS 移植到 STM32F407VETX 记录(一)
stm32·单片机·嵌入式硬件
CSDN官方博客13 小时前
「谁说嵌入式只是调包和焊板子?」—— 2026嵌入式全栈技术征锋令
嵌入式硬件·物联网·embedding
点灯小铭13 小时前
基于单片机的数码管定时插座设计与定时开关功能实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
云栖梦泽14 小时前
玩转RK3506SDK
linux·嵌入式硬件
数智工坊15 小时前
机器人四大主控板系统分层选型指南:树莓派、ESP32、STM32与Arduino的能力边界与实战定位
stm32·嵌入式硬件·机器人
进击的小头16 小时前
第8篇:IGBT 从零到精通:核心原理、关键参数、选型指南与工业级应用要点
经验分享·嵌入式硬件·学习
点灯小铭16 小时前
基于单片机的多模式智能洗衣机设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
项目題供诗16 小时前
STM32-AD单通道&AD多通道(十九)
stm32·单片机·嵌入式硬件