写入0x8000,读出变成了0x10000
如果写入0x4000,读出则变成了0x8000,想启用PD0,PD1重映射,怎么就出现这种问题呢?是MRS的问题,还是芯片的问题?
实测AFIO_PCFR1写入0x8000后,PD0,PD1重映射开启成功,能输出正确的电平信号。
您好,这边根据你的情况测试了一下,并没有复现出你的问题,打印和调试测试该寄存器读出都是正常的(寄存器操作方式也测试过),如下图,可检查一下MRS版本是否为最新版,可升至最新版本试一下,若方便,可将你的测试例程发至这边测试一下。后续问题可通过邮箱(lzs@wch.cn)和我沟通
我的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)和我详细沟通一下
将MRS更新到1.85版本后正常了
MRS1.84版本,用WCH-LINK下载程序,每次都要下载两次才能下载成功。更新到MRS1.85后,一次就下载成功了。