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

[复制链接]
4824|15
 楼主| 小白儿 发表于 2023-9-7 14:49 | 显示全部楼层 |阅读模式
我的发光LED驱动是低电平导通的,而国民的这个芯片上电默认是模拟输入,导致我的板子上电一瞬间灯会亮一下。不改变电路的情况下,请问一下如何解决,谢谢了。
顾言 发表于 2023-9-7 14:57 | 显示全部楼层
修改i/o初始配置。
 楼主| 小白儿 发表于 2023-9-7 15:28 | 显示全部楼层
它的底层代码吗?
  1. void SystemInit(void)
  2. {
  3.     /* FPU settings
  4.      * ------------------------------------------------------------*/
  5. #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
  6.     SCB->CPACR |= ((3UL << 10 * 2) | (3UL << 11 * 2)); /* set CP10 and CP11 Full Access */
  7. #endif

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

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

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

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

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

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

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

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

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

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

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

  32.     /* Enable ICACHE and Prefetch Buffer */
  33.     FLASH->AC |= (uint32_t)(FLASH_AC_ICAHEN | FLASH_AC_PRFTBFEN);
  34.    
  35.     /* Checks whether the Low Voltage Mode status is SET or RESET */
  36.     if((FLASH->AC & FLASH_AC_LVMF) != RESET)
  37.     {
  38.         /* FLASH Low Voltage Mode Disable */
  39.         FLASH->AC &= (uint32_t)(~FLASH_AC_LVMEN);
  40.     }

  41. #ifdef DATA_IN_ExtSRAM
  42.     SystemInit_ExtMemCtl();
  43. #endif /* DATA_IN_ExtSRAM */

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

  47. #ifdef VECT_TAB_SRAM
  48.     SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
  49. #else
  50.     SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
  51. #endif
  52. }
 楼主| 小白儿 发表于 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
}
xch 发表于 2023-9-7 15:59 | 显示全部楼层
在修改端口为输出模式之前,先把LED 对应的端口输出寄存器POD对应位置1.
复位时,POD位大部分默认为0. 如果不这么操作是会闪一下。
 楼主| 小白儿 发表于 2023-9-8 11:39 | 显示全部楼层
xch 发表于 2023-9-7 15:59
在修改端口为输出模式之前,先把LED 对应的端口输出寄存器POD对应位置1.
复位时,POD位大部分默认为0. 如果 ...

效果不大,从上电到初始化端口系统还有很多代码的。
xch 发表于 2023-9-8 11:50 | 显示全部楼层
小白儿 发表于 2023-9-8 11:39
效果不大,从上电到初始化端口系统还有很多代码的。

main 函数入口设置一个断点。或者死循环。LED应当不亮。
如果亮了,改硬件。
 楼主| 小白儿 发表于 2023-9-8 13:58 | 显示全部楼层
xch 发表于 2023-9-8 11:50
main 函数入口设置一个断点。或者死循环。LED应当不亮。
如果亮了,改硬件。 ...

还是亮的,改高电平驱动吗?不太想增加MCU的功耗
xch 发表于 2023-9-8 17:35 | 显示全部楼层
小白儿 发表于 2023-9-8 13:58
还是亮的,改高电平驱动吗?不太想增加MCU的功耗

你用了哪只引脚? Pxy?
 楼主| 小白儿 发表于 2023-9-9 11:58 | 显示全部楼层
xch 发表于 2023-9-8 17:35
你用了哪只引脚? Pxy?



 楼主| 小白儿 发表于 2023-9-9 17:21 | 显示全部楼层
 楼主| 小白儿 发表于 2023-9-9 17:22 | 显示全部楼层
xch 发表于 2023-9-8 17:35
你用了哪只引脚? Pxy?

PB8\PB9
xch 发表于 2023-9-9 21:24 | 显示全部楼层
 楼主| 小白儿 发表于 2023-9-11 17:15 | 显示全部楼层
xch 发表于 2023-9-9 21:24
还是软件问题

我知道,我查了相关资料,很多芯片上电是浮空输入,属于高阻态上电没这个问题,国民的是模拟输入。
xch 发表于 2023-9-12 09:33 | 显示全部楼层
小白儿 发表于 2023-9-11 17:15
我知道,我查了相关资料,很多芯片上电是浮空输入,属于高阻态上电没这个问题,国民的是模拟输入。 ...

用JFLASH 工具擦除芯片。然后上电。LED应该不亮。如果还亮,检查一下电路
 楼主| 小白儿 发表于 2023-9-15 13:37 | 显示全部楼层
xch 发表于 2023-9-12 09:33
用JFLASH 工具擦除芯片。然后上电。LED应该不亮。如果还亮,检查一下电路
...

常量了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

16

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部