打印
[单片机芯片]

CH32V203C8T6 端口 PC13不能输出高

[复制链接]
1074|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lihm|  楼主 | 2023-3-4 16:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
做了一个控制电源的板子,使用CH32V203C8T6芯片,端口 PC13一直不能输出高 。然后找了一个例程,发现PC13,PC14,PC15都不能输出高,而GPIOA是可以变化的。请哪位大神指教一下软件的问题出在哪里。
原理图单片机部分

以下是代码的主要部分
void GPIOA_Toggle_INIT(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

/*********************************************************************
* @fn      GPIO_Toggle_INIT
*
* @brief   Initializes GPIOA.0
*
* @return  none
*/
void GPIOC_Toggle_INIT( void )
{
    GPIO_InitTypeDef  GPIO_InitStructure = {0};

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE );

    PWR_BackupAccessCmd( ENABLE );                                          /*允许修改RTC和后备寄存器*/
    RCC_LSEConfig( RCC_LSE_OFF );                                           /*关闭外部低速时钟,PC14&PC15可以用作普通IO*/
    BKP_TamperPinCmd(DISABLE);                                              /*关闭入侵检测功能,PC13可以用作普通IO*/

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13| GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init( GPIOC, &GPIO_InitStructure );
    PWR_BackupAccessCmd(DISABLE);                                           /*禁止修改RTC和后备寄存器*/
}
/*********************************************************************
* @fn      main
*
* @brief   Main program.
*
* @return  none
*/
int main(void)
{
    u8 l = 0;
    u8 i = 0;
    u8 j = 0;
    u8 k = 0;

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    Delay_Init();
    USART_Printf_Init(115200);
    printf("SystemClk:%d\r\n", SystemCoreClock);
    printf("GPIO_PC13&PC14&PC15 TEST\r\n");

    GPIOA_Toggle_INIT();
    GPIOC_Toggle_INIT();

    while(1)
    {
        Delay_Ms(100);
        GPIO_WriteBit( GPIOA, GPIO_Pin_0,  ( i == 0 ) ? ( i = Bit_SET ) : ( i = Bit_RESET ) );
        GPIO_WriteBit( GPIOC, GPIO_Pin_13, ( l == 0 ) ? ( l = Bit_SET ) : ( l = Bit_RESET ) );
        GPIO_WriteBit( GPIOC, GPIO_Pin_14, ( j == 0 ) ? ( j = Bit_SET ) : ( j = Bit_RESET ) );
        GPIO_WriteBit( GPIOC, GPIO_Pin_15, ( k == 0 ) ? ( k = Bit_SET ) : ( k = Bit_RESET ) );
    }
}









使用特权

评论回复
沙发
hahajing27| | 2023-3-4 19:20 | 只看该作者
图对不上,图里是st的片子。

使用特权

评论回复
板凳
袁胜富| | 2023-3-4 20:54 | 只看该作者
好像只能用于输入,不能作为输出

使用特权

评论回复
地板
imdx| | 2023-3-4 21:05 | 只看该作者
因为CH32V203C8T6有个小bug,PORTC口的PC13、PC14、PC15位于寄存器的bit0、bit1、bit2,而不是常见的bit13,bit14、bit15,固件库处理过这个问题,并且跟CH32V203C8T6的硬件版本有关系,新的版本修正了这个问题。
void GPIO_ResetBits(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
#if defined (CH32V20x_D6)
    if((GPIOx == GPIOC) && MCU_Version){
        GPIO_Pin = GPIO_Pin >> 13;
    }
#endif
    GPIOx->BCR = GPIO_Pin;
}

使用特权

评论回复
评论
sagade 2023-3-6 10:13 回复TA
原来如此,原先都不知道这里为什么要这样处理 
5
shenxiaolin| | 2023-3-5 09:16 | 只看该作者
话说这个是RISC_V的片子么?

使用特权

评论回复
6
zchong| | 2023-3-5 09:38 | 只看该作者
是的,risc-v芯片

使用特权

评论回复
7
QuakeGod| | 2023-3-5 16:04 | 只看该作者
PC13,PC14,PC15  这几个端口,工作电源是从VBat提供的,高电平输出是没有驱动能力的,不能作为通常的输出来用。

使用特权

评论回复
8
trucyw| | 2023-3-5 20:38 | 只看该作者
跟着各位大佬,又学习了新知识

使用特权

评论回复
9
tpgf| | 2023-4-6 17:24 | 只看该作者
楼主这个电路图上是这个芯片吗 型号好像不对啊

使用特权

评论回复
10
nawu| | 2023-4-7 10:23 | 只看该作者
imdx 发表于 2023-3-4 21:05
因为CH32V203C8T6有个小bug,PORTC口的PC13、PC14、PC15位于寄存器的bit0、bit1、bit2,而不是常见的bit13 ...

老版本的这个错误确实有些低级了

使用特权

评论回复
11
aoyi| | 2023-4-7 10:40 | 只看该作者
imdx 发表于 2023-3-4 21:05
因为CH32V203C8T6有个小bug,PORTC口的PC13、PC14、PC15位于寄存器的bit0、bit1、bit2,而不是常见的bit13 ...

原来哈有这个问题呢 那么楼主得确认一下用的是哪个版本的了

使用特权

评论回复
12
zljiu| | 2023-4-7 11:50 | 只看该作者
imdx 发表于 2023-3-4 21:05
因为CH32V203C8T6有个小bug,PORTC口的PC13、PC14、PC15位于寄存器的bit0、bit1、bit2,而不是常见的bit13 ...

这个小bug在数据手册上有相关体现吗

使用特权

评论回复
13
gwsan| | 2023-4-7 13:23 | 只看该作者
像这种问题 一般用户是找不到的  估计也不能往这方面想了

使用特权

评论回复
14
tfqi| | 2023-4-7 13:40 | 只看该作者
请问楼主找到原因了吗  是四楼说的原因导致的吗

使用特权

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

本版积分规则

1

主题

6

帖子

0

粉丝