CH32V003F4P6 点亮多个LED问题

void GPIO_Toggle_INIT(void)

{

? ? GPIO_InitTypeDef GPIO_InitStructure = {0};


? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);

? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_6|GPIO_Pin_5|GPIO_Pin_4|GPIO_Pin_3|GPIO_Pin_2|GPIO_Pin_1|GPIO_Pin_0;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

? ? //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

? ? GPIO_Init(GPIOD, &GPIO_InitStructure);

}


/*********************************************************************

?* @fn? ? ? main

?*

?* @brief? ?Main program.

?*

?* @return? none

?*/

int main(void)

{

? ? u8 i = 0;


? ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

? ? SystemCoreClockUpdate();

? ? Delay_Init();

#if (SDI_PRINT == SDI_PR_OPEN)

? ? SDI_Printf_Enable();

#else

? ? USART_Printf_Init(115200);

#endif

? ? printf("SystemClk:%d\r\n", SystemCoreClock);

? ? printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );

? ? printf("GPIO Toggle TEST\r\n");

? ??

? ? GPIO_Toggle_INIT();


? ? while(1)

? ? {

? ? ? ? Delay_Ms(250);

? ? ? ? (i == 0) ? (i = Bit_SET) : (i = Bit_RESET);

? ? ? ? //GPIO_WriteBit(GPIOD, GPIO_Pin_0, i);

? ? ? ? //GPIO_WriteBit(GPIOD, GPIO_Pin_1, i);

? ? ? ? GPIO_WriteBit(GPIOD, GPIO_Pin_2, i);


? ? }

}

嗯,一般的单片机点灯,配置相关GPIO脚之后,然后写高低电平就可以了,我测试了一下点灯,点一个还好,同时点两个就有问题了spacer.gif

代码如上,两个LED分别接在PD0,PD2脚,

如果只是注释掉“?GPIO_WriteBit(GPIOD, GPIO_Pin_2, i);”两个LED交替亮灭,

如果只是注释掉“?GPIO_WriteBit(GPIOD, GPIO_Pin_0, i);”,PD0上LED长亮。


如果在GPIO_Toggle_INIT();之后插入:GPIO_WriteBit(GPIOD, GPIO_Pin_2, 1);

while 里面?GPIO_WriteBit(GPIOD, GPIO_Pin_0, i); PD0上LED闪烁


如果在GPIO_Toggle_INIT();之后插入:GPIO_WriteBit(GPIOD, GPIO_Pin_0, 1);

while 里面?GPIO_WriteBit(GPIOD, GPIO_Pin_2, i); PD2上LED闪烁


问题来了,同时要两个LED同时亮,同时灭,怎么实现?

我反复试了以上代码,只能把一个写高电平让LED不亮,另一个才能正常控制亮灭


您好,附件为两个LED同时亮灭例程,可以参考一下。此外,PD7引脚为复位引脚,PD5为例程默认串口打印引脚,PD1为SWIO引脚,使用时注意合理配置。

icon_rar.gifCH32V003 GPIO_LED.zip



好的,我在使用GPIO的时候就避开了你说的那几个脚


你给的代码我刚刚试了,只有PD0上的LED能闪烁,PD2亮不了


您好,我这边测试是没问题的,GPIO翻转波形如下,若你那边有问题,可以检查一下硬件是否存在问题,后续若有问题,可邮箱(lzs@wch.cn)沟通。

image.png


我使用的是开发板,单个LED单独测试是没有问题的,但是同时点亮两个就不行




用U口供电试试,可能是供电问题


只有登录才能回复,可以选择微信账号登录