SW模式下PB3管脚控制

2019-07-21 00:58发布

一个项目用到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模式
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-07-21 01:20
谢谢分享
daliangcao
2楼-- · 2019-07-21 06:27
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模式

我也用了,确实可以实现PB3当作普通IO来用,可是我碰到的问题是PB3拉高时,输出电压是2.83v。这是怎么回事,我要的是3.3V。这怎么办?
正点原子
3楼-- · 2019-07-21 09:35
回复【3楼】daliangcao:
---------------------------------
 检查硬件。是不是其它地方接了外设/下拉电阻。
daliangcao
4楼-- · 2019-07-21 12:51
回复【4楼】正点原子:
---------------------------------
我把芯片换一个,结果就好了。
kaiyuan123
5楼-- · 2019-07-21 13:16
 精彩回答 2  元偷偷看……
HIDCRNTFJ
6楼-- · 2019-07-21 17:46
 精彩回答 2  元偷偷看……

一周热门 更多>