- /**
- * [url=/u/brief]@brief[/url] 简单的LED闪烁程序 for Nuvoton M051 Series
- * [url=/u/硬件]@硬件[/url] NuTiny-EVB-M051 (LED连接到 P3.6)
- * @说明 使用标准库和查询方式延时
- */
- #include "M051Series.h" // 包含M051系列的所有寄存器定义和标准库函数
- // 函数声明
- void SYS_Init(void);
- void GPIO_Init(void);
- void Delay(uint32_t iter);
- int main(void)
- {
- /* 初始化系统时钟、GPIO等 */
- SYS_Init();
- /* 初始化GPIO,配置LED引脚 */
- GPIO_Init();
- while(1)
- {
- // 点亮LED (根据硬件连接,可能是低电平点亮)
- P36 = 0;
- // 延时
- Delay(500000);
- // 熄灭LED
- P36 = 1;
- // 延时
- Delay(500000);
- }
- }
- /**
- * @brief 系统初始化
- * 配置系统时钟,使能外设时钟
- */
- void SYS_Init(void)
- {
- /*---------------------------------------------------------------------------------------------------------*/
- /* Init System Clock */
- /*---------------------------------------------------------------------------------------------------------*/
- /* 使能外部12MHz晶振 */
- SYS->PWRCON |= SYS_PWRCON_XTL12M_EN_Msk;
- /* 等待时钟稳定 */
- while(!(SYS->CLKSTATUS & SYS_CLKSTATUS_CLK_STABLE_Msk));
- /* 选择HCLK时钟源为外部晶振,HCLK不分频 (HCLK = 12MHz) */
- SYS->CLKSEL0 = SYS_CLKSEL0_HCLK_S_XTAL;
- SYS->CLKDIV = SYS_CLKDIV_HCLK_N(1);
- /* 使能GPIO模块的时钟 */
- SYS->AHBCLK |= SYS_AHBCLK_GPIO_CKEN_Msk;
- }
- /**
- * @brief GPIO初始化
- * 将P3.6配置为推挽输出模式,控制LED
- */
- void GPIO_Init(void)
- {
- /* 将P3.6设置为GPIO模式(如果不是的话) */
- SYS->P3_MFP &= ~SYS_MFP_P36_Msk;
- SYS->P3_MFP |= SYS_MFP_P36_GPIO;
- /* 设置P3.6为输出模式 */
- GPIO_SetMode(P3, BIT6, GPIO_PMD_OUTPUT);
- /* 初始状态:熄灭LED (输出高电平) */
- P36 = 1;
- }
- /**
- * @brief 简单的软件延时函数
- * @param iter: 延时循环次数
- * [url=/u/NOTE]@NOTE[/url] 这不是精确的延时,用于简单的演示。实际项目中建议使用定时器。
- */
- void Delay(uint32_t iter)
- {
- volatile uint32_t i;
- for(i = 0; i < iter; i++)
- {
- __NOP(); // 插入空操作,防止循环被编译器优化掉
- }
- }
|