问答

汇集网友智慧,解决技术难题

21ic问答首页 - 新唐M481LGCAE 操作GPIO问题

MCU 新唐 M481LGCAE M4 问答

新唐M481LGCAE 操作GPIO问题

johnmalihong2025-05-19
第一次用新唐的MCU,如下程序的目的是设置GPIO的PA4引脚为高电平,但实际IO口无动作,由于用的基本是库函数,keil编译没报错,用DAPLink烧录也烧录成功verify OK

修改多次无果,求助论坛大佬们帮忙

#include <stdio.h>
#include "NuMicro.h"

#define PLL_CLOCK           192000000

void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Unlock protected registers */
    SYS_UnlockReg();

       
//使能内部高速时钟12MHz
CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);

       
//等待内部高速时钟12MHz准备好
CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);

               
//开启PLL,设置PLL输出频率为192MHz
CLK_EnablePLL(CLK_PLLCTL_192MHz_HIRC,  PLL_CLOCK);

//等待PLL时钟稳定
CLK_WaitClockReady(CLK_STATUS_PLLSTB_Msk);

//HCLK分频器设置
CLK_SetHCLK( CLK_CLKSEL0_HCLKSEL_HIRC,  CLK_CLKDIV0_HCLK(0x4));

//设置M4核心系统时钟 = 1/2 HIRC 即6MHz
//CLK_SetSysTickClockSrc( CLK_CLKSEL0_STCLKSEL_HIRC_DIV2);

//设置APB0和APB1的分频系数,设置为2即192MHz二分频为96MHz
CLK->PCLKDIV = (CLK_PCLKDIV_APB0DIV_DIV2 | CLK_PCLKDIV_APB1DIV_DIV2);

//更新系统时钟
SystemCoreClockUpdate();

               
//清除PA4引脚的复用设置,即默认模式为GPIO
SYS->GPA_MFPL &= ~(SYS_GPA_MFPL_PA4MFP_Msk);
SYS->GPA_MFPL |= (SYS_GPA_MFPL_PA4MFP_GPIO);

//寄存器上锁保护
SYS_LockReg();
}

int main()
{

    SYS_Init();

       
//设置PA4为输出模式
GPIO_SetMode( PA,  BIT4,  GPIO_MODE_OUTPUT);
//PA->MODE |= (GPIO_MODE_OUTPUT << (4*2));

       
//设置PA4为高电平
//PA4 = 1;
//PA->DOUT |= (1 << 4);
//PA->DOUT |= BIT4;
PA->DOUT = 0xFFFFFFFF;

    /* Got no where to go, just loop forever */
    while(1);
}


回答 +关注 0
1472人浏览 6人回答问题 分享 举报
6 个回答
  • 看起来你的代码逻辑是正确的,但是可能存在硬件问题或者配置问题。建议检查硬件连接和电源供应是否正常。
  • 看起来你的代码逻辑是正确的,但是可能存在硬件配置问题。请检查PA4引脚是否正确连接,以及是否有其他硬件因素影响。
  • 看起来你的代码逻辑是正确的,但是请检查一下PA4引脚是否支持GPIO功能,有些引脚可能被默认分配给了其他功能。
  • 看起来你的代码逻辑是正确的,但是请确保你的硬件连接没有问题。有时候,问题可能出在硬件上,而不是代码。
  • 你按如下方式输出高电平试试:
    void GPIO_Init(void)
    {
        /* PA4设置为推挽输出 */
        SYS->GPAMOD |= SYS_GPAMOD_PA4MFP_EINT4; // 设置PA4为多功能模式
        GPIOA->MODE &= \~(GPIO_MODE_MODE0_Msk << (4 * GPIO_MODE_MODE0_Pos)); // 清除PA4的模式设置
        GPIOA->MODE |= GPIO_MODE_MODE0 << (4 * GPIO_MODE_MODE0_Pos); // 设置PA4为推挽输出模式
        GPIOA->DIR |= GPIO_DIR_DIR4; // 设置PA4为输出模式
        GPIOA->OUT |= GPIO_OUT_OUT4; // 将PA4设置为高电平
    }

  • 麻烦大佬们再帮忙看下哪里写错了。。

您需要登录后才可以回复 登录 | 注册