打印
[STM32F1]

STM32的jtag引脚复用

[复制链接]
2156|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mahongtu|  楼主 | 2014-1-9 11:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DBGMCU->CR &= 0xFFFFFFDF;
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
// AFIO->MAPR &= 0x1FFFFF;
// AFIO->MAPR |= 0x1000000;

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//|GPIO_Pin_3; //GPIO_Pin_3|
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

执行上面的过程以后,可以看到寄存器的 值(SWJ_CFG是0x04),按照手册来说应该是0x02,才可以,因为我想用swd口,剩下的jtag的引脚不用的我用作普通的io口来使用
沙发
mahongtu|  楼主 | 2014-1-9 12:39 | 只看该作者
为什么 显示 结贴了?

使用特权

评论回复
板凳
jjjkkk00| | 2014-1-9 12:53 | 只看该作者
为了利用串行调试接口来释放一些普通I/O口,用户软件必须在复位后设置SWJ_CFG=010,从而释放PA15,PB3和PB4用做普通I/O口。
在调试时,调试器进行以下操作:
● 在系统复位时,所有SWJ引脚被分配为专用引脚(JTAG-DP + SW-DP)。
● 在系统复位状态下,调试器发送指定JTAG序列,从JTAG-DP切换到SW-DP。
● 仍然在系统复位状态下,调试器在复位地址处设置断点
● 释放复位信号,内核停止在复位地址处。
● 从这里开始,所有的调试通信将使用SW-DP接口,其他JTAG引脚可以由用户代码改配为普通I/O口。
注意: 对于用户软件设计,应注意:
在复位后,这些专用引脚仍然处于带上拉的输入(nTRST, TMS, TDI),带下拉的输入(TCK),和输出(TDO)状态,并持续一段时间,直到用户代码释放这些引脚。
当这些引脚被配置成专用引脚时(JTAG或者SW或者TRACE),修改相应的普通I/O口配置寄存器是无效的。
---------------------------------------------------------------------------------------------------摘自:STM32F10xxx参考手册

使用特权

评论回复
地板
mahongtu|  楼主 | 2014-1-9 14:21 | 只看该作者
我就是这么做的,而且我在A15,B3,B4 都输出方波,都能看见
但是我用他模拟iic就出错了

使用特权

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

本版积分规则

3

主题

18

帖子

1

粉丝