先看教程
冲哥stc32G第6集上:LED闪烁和花式点灯
摘要
1-基于 Delay 实现的 LED 闪烁
2-函数的使用
3-新建文件,使用模块化编程
建立一个project
06_led_flash_01
main.c内容---先写框架
- #include "stc32g.h"
-
- // 定义主时钟频率
- #define MAIN_Fosc 24000000UL
-
- // 函数声明
- void sys_init(void);
- void main(void);
-
- /**
- * @brief 系统初始化函数
- * @param void
- * @retval void
- * @note 初始化CPU性能、XFR访问权限和所有GPIO为默认模式
- */
- void sys_init(void)
- {
- // --- 1. 优化CPU性能 ---
- // 设置程序指令延时参数为0,使CPU运行速度最快
- WTST = 0;
-
- // --- 2. 使能扩展功能寄存器(XFR)访问 ---
- // 此设置是访问XFR寄存器的必要前提
- EAXFR = 1;
-
- // --- 3. 提高XRAM访问速度 ---
- // 设置CKCON寄存器以优化外部RAM访问时序
- CKCON = 0;
-
- // --- 4. 解锁XFR访问通道 ---
- // 设置P_SW2的Bit7,启用对扩展功能寄存器的访问
- // 注意:此操作必须在EAXFR=1之后
- P_SW2 |= 0x80;
-
- // --- 5. 初始化所有GPIO端口为默认准双向模式 ---
- // 准双向模式 (PnM1=0, PnM0=0) 是最常用的I/O模式
- // 通过循环或一次性赋值可以提高代码简洁性
- // 方法一:逐个赋值(清晰易懂)
- P0M1 = 0x00; P0M0 = 0x00;
- P1M1 = 0x00; P1M0 = 0x00;
- P2M1 = 0x00; P2M0 = 0x00;
- P3M1 = 0x00; P3M0 = 0x00;
- P4M1 = 0x00; P4M0 = 0x00;
- P5M1 = 0x00; P5M0 = 0x00;
- P6M1 = 0x00; P6M0 = 0x00;
- P7M1 = 0x00; P7M0 = 0x00;
- }
-
- /**
- * @brief 主函数
- * @param void
- * @retval int (遵循ANSI C标准,但单片机程序通常忽略返回值)
- * @note 程序入口点,系统初始化完成后进入主循环
- */
- int main(void) // 将返回类型改为 int 更符合标准
- {
- sys_init(); // 系统初始化
-
- while(1)
- {
- // 在此处添加您的应用程序代码
- // Application Code Here...
- }
- // 通常main函数不会返回,但加上return语句是良好习惯
- return 0;
- }
复制代码
其中的注释是qwen3.5-code提供的。
ai还提供了第二个方法设置GPIO的模式
- // 方法二:使用宏定义简化(如果项目规模更大,可考虑)
- /*
- #define SET_PORT_MODE(port, m1_val, m0_val) do{ \
- port##M1 = m1_val; \
- port##M0 = m0_val; \
- }while(0)
- SET_PORT_MODE(P0, 0x00, 0x00);
- SET_PORT_MODE(P1, 0x00, 0x00);
- // ... 其他端口
- */
复制代码
|