CH32V203C8T6的AFIO_PCFR1寄存器读写错一位是怎么回事?

AFIO_PCFR1.png写入0x8000,读出变成了0x10000

如果写入0x4000,读出则变成了0x8000,想启用PD0,PD1重映射,怎么就出现这种问题呢?是MRS的问题,还是芯片的问题?


实测AFIO_PCFR1写入0x8000后,PD0,PD1重映射开启成功,能输出正确的电平信号。


您好,这边根据你的情况测试了一下,并没有复现出你的问题,打印和调试测试该寄存器读出都是正常的(寄存器操作方式也测试过),如下图,可检查一下MRS版本是否为最新版,可升至最新版本试一下,若方便,可将你的测试例程发至这边测试一下。后续问题可通过邮箱(lzs@wch.cn)和我沟通image.png



我的MRS是1.84量新版本的,GPIO配置代码如下




void gpio_init(void)

{

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOD, ENABLE);

    //CFGLR:[31..28]CNF7[1:0]MODE7[1:0],...,[3..0]CNF0[1:0]MODE0[1:0]

    //CFGHR:[31..28]CNF15[1:0]MODE15[1:0],...,[3..0]CNF8[1:0]MODE8[1:0]

    //CNFxMODEx:0模拟输入,4浮空输入,8带上下拉输入

    //          1(2,3)通用推挽输出(10M,2M,50MHz),5(6,7)通用开漏输出(10M,2M,50MHz)

    //          9(A,B)复用推挽输出(10M,2M,50MHz),D(E,F)复用开漏输出(10M,2M,50MHz)

    //OUTDR:[15]ODR15,...,[0]ODR0    输入模式时:0下拉,1上拉

    //BSHR:[31]BR15,...,[16]BR0,[15]BS15,...,[0]BS0  如果同时设置了BR和BS位,则BS位起作用

    GPIOA->CFGLR = 0x01090008;

    GPIOA->CFGHR = 0x19914411;

    GPIOA->OUTDR = 0x90000;


    GPIOB->CFGLR = 0x00888111;

    GPIOB->CFGHR = 0x11141118;

    GPIOB->OUTDR = 0x2B00;


    //AFIO_PCFR1:[26..24]SW_CFG,[15]PD01_RM

    //           SW_CFG:0XX启用SWD,100关闭SWD

    AFIO->PCFR1 = (1u<<15);

    GPIOD->CFGLR = 0x00000011;

    GPIOD->CFGHR = 0x00000000;

    GPIOD->OUTDR = 0x0000;

}



为什么选择编辑器代码语言格式后,代码里一堆问号?


您好,这边直接复制你的例程测试,寄存器调试显示以及打印读出的值都是正常的,是0x8000,如下图。直接给寄存器赋值0x8000也是一样的。可将MRS卸载重新装一下试一下或者换个电脑试一下是否会有该问题。可将你的工程整个发给我试一下,注意一下工程文件的配置,根据MCU的具体型号对工程文件进行配置。后续问题可通过邮箱(lzs@wch.cn)和我详细沟通一下

image.png


将MRS更新到1.85版本后正常了


MRS1.84版本,用WCH-LINK下载程序,每次都要下载两次才能下载成功。更新到MRS1.85后,一次就下载成功了。


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