一个项目用到PB3发现的问题。设置为SW模式时,PB3管脚在跟踪时为TRACESWO信号,cpu软件复位也不会清除,需断电才能再次使用。所以需要关闭跟踪。
否则在进入调试后,PB3管脚不受ODR控制。
关于寄存器:
3个控制位用来配置SWJ-DP 接口的引脚,这3个位在系统复位时复位。
● AFIO_MAPR(STM32F10xxx微控制器中的地址是0x40010004)
─ 读:APB,无等待状态
─ 写:APB,如果AHB-APB桥的写缓冲器满了,则一个等待状态
位26:24=SWJ_CFG[2:0]
由软件置位和复位
这3位用来设置分配给SWJ调试接口的专用引脚数目,目的是在使用不同的调试接口时能释放
尽可能多的引脚用作普通I/O 口。
复位后的初始值是000( 所有引脚都设置为JTAG-DP接口专用引脚),同时只能置位3个位中的
一个(禁止同时设置一个以上的位)。
调试MCU配置寄存器DBGMCU_CR :
此寄存器允许在调试状态下下配置MCU。包括:
● 支持低功耗模式
● 支持定时器和看门狗的计数器
● 支持bxCAN通信
● 分配跟踪引脚
DBGMCU_CR寄存器被映射到外部PPB 总线,基地址为0xE0042000 。
寄存器由PORESET 异步复位(
不被系统复位所复位) 。当内核处于复位状态下时,调试器可写该
寄存器。
如果调试器不支持这些特性,用户软件仍可写这些寄存器。
DBGMCU_CR
地址:0xE0042004
只支持32位访问
POR复位:0x0000 0000(不被系统复位所复位)
使用SW并且PB3可控的配置代码,注意时能AFIO。
RCC->APB2ENR |= 1 | (1<<3); /*AFIO/ GPIOB*/
DBGMCU->CR = DBGMCU->CR & ~((uint32_t)1<<5);
AFIO->MAPR |= (AFIO->MAPR & ~((uint32_t)0x7 << 24)) | (2 << 24); //SW模式
DBGMCU->CR = DBGMCU->CR & ~((uint32_t)1<<5);
AFIO->MAPR |= (AFIO->MAPR & ~((uint32_t)0x7 << 24)) | (2 << 24); //SW模式
我也用了,确实可以实现PB3当作普通IO来用,可是我碰到的问题是PB3拉高时,输出电压是2.83v。这是怎么回事,我要的是3.3V。这怎么办?
---------------------------------
检查硬件。是不是其它地方接了外设/下拉电阻。
---------------------------------
我把芯片换一个,结果就好了。
一周热门 更多>