create_ce 发表于 2015-6-6 13:03:12

用cubemx生成stm32f103的代码,JTAG管脚复用GPIO模式,为何控制不了

使用的是JLINK V8,在SW模式来烧写程序,所以PB3、PB4、PA15作为GPIO使用,但问题是我无法用
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4,GPIO_PIN_SET)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4,GPIO_PIN_RESET)来进行控制,也就是电平无法拉高拉低,

初始化已经置为GPIO模式
GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_8
                        |GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

请教有没有遇到这种问题,有没有解决的办法?

发表于 2015-6-6 14:37:27

PB4是NJTRST,需要先关闭这个功能。

create_ce 发表于 2015-6-6 14:54:18

用STM32CubeMX配置的,怎么关闭?也就是关闭JTAG功能,保留SW功能

发表于 2015-6-6 14:58:36

没用过这个怎么配置,标准库是可以直接通过GPIO重映射修改。

create_ce 发表于 2015-6-6 16:21:18

加了一句,__HAL_AFIO_REMAP_SWJ_NOJTAG();可以PB3 PB4当IO使用了,不过烧写完程序后,第二次居然烧写不了程序,必须把boot0拉高才能再次写程序,可是我总不能来回把boot0拉高拉低地切换,太麻烦了!:dizzy:

发表于 2015-6-6 16:53:56

为什么非要这2个口呢?不能避开吗?

create_ce 发表于 2015-6-6 17:39:28

不可避免,不是我的设计的硬件,是别人的:L

你好我好大家好! 发表于 2015-6-6 18:51:15

自己修改一下

Dylan疾风闪电 发表于 2015-6-8 16:47:49

跳线,:)

create_ce 发表于 2015-6-13 18:26:47

__HAL_AFIO_REMAP_SWJ_NONJTRST();搞掂了
页: [1] 2
查看完整版本: 用cubemx生成stm32f103的代码,JTAG管脚复用GPIO模式,为何控制不了