打印

国民N32G031使用发光二极管上电闪亮。

[复制链接]
3844|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小白儿|  楼主 | 2023-9-7 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的发光LED驱动是低电平导通的,而国民的这个芯片上电默认是模拟输入,导致我的板子上电一瞬间灯会亮一下。不改变电路的情况下,请问一下如何解决,谢谢了。

使用特权

评论回复
沙发
顾言| | 2023-9-7 14:57 | 只看该作者
修改i/o初始配置。

使用特权

评论回复
板凳
小白儿|  楼主 | 2023-9-7 15:28 | 只看该作者
它的底层代码吗?
void SystemInit(void)
{
    /* FPU settings
     * ------------------------------------------------------------*/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 10 * 2) | (3UL << 11 * 2)); /* set CP10 and CP11 Full Access */
#endif

    /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
    /* Set MSIEN bit */
    RCC->CTRLSTS |= (uint32_t)0x00000004;

    /* Reset SW, HPRE, PPRE1, PPRE2 and MCO bits */
    RCC->CFG &= (uint32_t)0xF8FFC000;

    /* Reset HSEON, CLKSSEN and PLLEN bits */
    RCC->CTRL &= (uint32_t)0xFEF6FFFF;

    /* Reset HSEBYP bit */
    RCC->CTRL &= (uint32_t)0xFFFBFFFF;

    /* Reset PLLSRC, PLLXTPRE, PLLMUL, MCOPRES and USBPRES bits */
    RCC->CFG &= (uint32_t)0x0700FFFF;

    /* Reset CFG2 register */
    RCC->CFG2 = 0x00000000;

    /* Reset CFG3 register */
    RCC->CFG3 = 0x00000000;

    /* Reset RDCTRL register */
    RCC->RDCTRL = 0x00000000;

    /* Reset PLLHSIPRE register */
    RCC->PLLHSIPRE = 0x00000000;

    /* Disable all interrupts and clear pending bits  */
    RCC->CLKINT = 0x04BF8000;

    /* Enable ex mode */
    RCC->APB1PCLKEN |= RCC_APB1PCLKEN_PWREN;
    RCC->APB1PCLKEN &= (uint32_t)(~RCC_APB1PCLKEN_PWREN);

    /* Enable ICACHE and Prefetch Buffer */
    FLASH->AC |= (uint32_t)(FLASH_AC_ICAHEN | FLASH_AC_PRFTBFEN);
   
    /* Checks whether the Low Voltage Mode status is SET or RESET */
    if((FLASH->AC & FLASH_AC_LVMF) != RESET)
    {
        /* FLASH Low Voltage Mode Disable */
        FLASH->AC &= (uint32_t)(~FLASH_AC_LVMEN);
    }

#ifdef DATA_IN_ExtSRAM
    SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM */

    /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
    /* Configure the Flash Latency cycles and enable prefetch buffer */
    SetSysClock();

#ifdef VECT_TAB_SRAM
    SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
    SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif
}

使用特权

评论回复
地板
小白儿|  楼主 | 2023-9-7 15:29 | 只看该作者
顾言 发表于 2023-9-7 14:57
修改i/o初始配置。

它的底层代码吗?
void SystemInit(void)
{
    /* FPU settings
     * ------------------------------------------------------------*/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 10 * 2) | (3UL << 11 * 2)); /* set CP10 and CP11 Full Access */
#endif

    /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
    /* Set MSIEN bit */
    RCC->CTRLSTS |= (uint32_t)0x00000004;

    /* Reset SW, HPRE, PPRE1, PPRE2 and MCO bits */
    RCC->CFG &= (uint32_t)0xF8FFC000;

    /* Reset HSEON, CLKSSEN and PLLEN bits */
    RCC->CTRL &= (uint32_t)0xFEF6FFFF;

    /* Reset HSEBYP bit */
    RCC->CTRL &= (uint32_t)0xFFFBFFFF;

    /* Reset PLLSRC, PLLXTPRE, PLLMUL, MCOPRES and USBPRES bits */
    RCC->CFG &= (uint32_t)0x0700FFFF;

    /* Reset CFG2 register */
    RCC->CFG2 = 0x00000000;

    /* Reset CFG3 register */
    RCC->CFG3 = 0x00000000;

    /* Reset RDCTRL register */
    RCC->RDCTRL = 0x00000000;

    /* Reset PLLHSIPRE register */
    RCC->PLLHSIPRE = 0x00000000;

    /* Disable all interrupts and clear pending bits  */
    RCC->CLKINT = 0x04BF8000;

    /* Enable ex mode */
    RCC->APB1PCLKEN |= RCC_APB1PCLKEN_PWREN;
    RCC->APB1PCLKEN &= (uint32_t)(~RCC_APB1PCLKEN_PWREN);

    /* Enable ICACHE and Prefetch Buffer */
    FLASH->AC |= (uint32_t)(FLASH_AC_ICAHEN | FLASH_AC_PRFTBFEN);
   
    /* Checks whether the Low Voltage Mode status is SET or RESET */
    if((FLASH->AC & FLASH_AC_LVMF) != RESET)
    {
        /* FLASH Low Voltage Mode Disable */
        FLASH->AC &= (uint32_t)(~FLASH_AC_LVMEN);
    }

#ifdef DATA_IN_ExtSRAM
    SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM */

    /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
    /* Configure the Flash Latency cycles and enable prefetch buffer */
    SetSysClock();

#ifdef VECT_TAB_SRAM
    SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
    SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif
}

使用特权

评论回复
5
xch| | 2023-9-7 15:59 | 只看该作者
在修改端口为输出模式之前,先把LED 对应的端口输出寄存器POD对应位置1.
复位时,POD位大部分默认为0. 如果不这么操作是会闪一下。

使用特权

评论回复
6
小白儿|  楼主 | 2023-9-8 11:39 | 只看该作者
xch 发表于 2023-9-7 15:59
在修改端口为输出模式之前,先把LED 对应的端口输出寄存器POD对应位置1.
复位时,POD位大部分默认为0. 如果 ...

效果不大,从上电到初始化端口系统还有很多代码的。

使用特权

评论回复
7
xch| | 2023-9-8 11:50 | 只看该作者
小白儿 发表于 2023-9-8 11:39
效果不大,从上电到初始化端口系统还有很多代码的。

main 函数入口设置一个断点。或者死循环。LED应当不亮。
如果亮了,改硬件。

使用特权

评论回复
8
小白儿|  楼主 | 2023-9-8 13:58 | 只看该作者
xch 发表于 2023-9-8 11:50
main 函数入口设置一个断点。或者死循环。LED应当不亮。
如果亮了,改硬件。 ...

还是亮的,改高电平驱动吗?不太想增加MCU的功耗

使用特权

评论回复
9
xch| | 2023-9-8 17:35 | 只看该作者
小白儿 发表于 2023-9-8 13:58
还是亮的,改高电平驱动吗?不太想增加MCU的功耗

你用了哪只引脚? Pxy?

使用特权

评论回复
10
小白儿|  楼主 | 2023-9-9 11:58 | 只看该作者
xch 发表于 2023-9-8 17:35
你用了哪只引脚? Pxy?



使用特权

评论回复
11
小白儿|  楼主 | 2023-9-9 17:21 | 只看该作者

使用特权

评论回复
12
小白儿|  楼主 | 2023-9-9 17:22 | 只看该作者
xch 发表于 2023-9-8 17:35
你用了哪只引脚? Pxy?

PB8\PB9

使用特权

评论回复
13
xch| | 2023-9-9 21:24 | 只看该作者

还是软件问题

使用特权

评论回复
14
小白儿|  楼主 | 2023-9-11 17:15 | 只看该作者
xch 发表于 2023-9-9 21:24
还是软件问题

我知道,我查了相关资料,很多芯片上电是浮空输入,属于高阻态上电没这个问题,国民的是模拟输入。

使用特权

评论回复
15
xch| | 2023-9-12 09:33 | 只看该作者
小白儿 发表于 2023-9-11 17:15
我知道,我查了相关资料,很多芯片上电是浮空输入,属于高阻态上电没这个问题,国民的是模拟输入。 ...

用JFLASH 工具擦除芯片。然后上电。LED应该不亮。如果还亮,检查一下电路

使用特权

评论回复
16
小白儿|  楼主 | 2023-9-15 13:37 | 只看该作者
xch 发表于 2023-9-12 09:33
用JFLASH 工具擦除芯片。然后上电。LED应该不亮。如果还亮,检查一下电路
...

常量了

使用特权

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

本版积分规则

1

主题

16

帖子

0

粉丝