打印

新唐M481LGCAE 操作GPIO问题

[复制链接]
1698|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
johnmalihong|  楼主 | 2025-5-19 16:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一次用新唐的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);
}


使用特权

评论回复
沙发
johnmalihong|  楼主 | 2025-5-20 11:19 | 只看该作者
麻烦大佬们再帮忙看下哪里写错了。。

使用特权

评论回复
板凳
dffzh| | 2025-5-20 13:26 | 只看该作者
你按如下方式输出高电平试试:
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设置为高电平
}

使用特权

评论回复
地板
作业天敌在此| | 2025-5-22 16:02 | 只看该作者
看起来你的代码逻辑是正确的,但是请确保你的硬件连接没有问题。有时候,问题可能出在硬件上,而不是代码。

使用特权

评论回复
5
绝影孤狼| | 2025-5-23 12:46 | 只看该作者
看起来你的代码逻辑是正确的,但是请检查一下PA4引脚是否支持GPIO功能,有些引脚可能被默认分配给了其他功能。

使用特权

评论回复
6
作业天敌在此| | 2025-5-23 17:30 | 只看该作者
看起来你的代码逻辑是正确的,但是可能存在硬件配置问题。请检查PA4引脚是否正确连接,以及是否有其他硬件因素影响。

使用特权

评论回复
7
暗夜幽灵骑士| | 2025-5-23 17:49 | 只看该作者
看起来你的代码逻辑是正确的,但是可能存在硬件问题或者配置问题。建议检查硬件连接和电源供应是否正常。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

粉丝