使用的是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); 请教有没有遇到这种问题,有没有解决的办法? |
PB4是NJTRST,需要先关闭这个功能。 |
用STM32CubeMX配置的,怎么关闭?也就是关闭JTAG功能,保留SW功能 |
没用过这个怎么配置,标准库是可以直接通过GPIO重映射修改。 |
加了一句,__HAL_AFIO_REMAP_SWJ_NOJTAG();可以PB3 PB4当IO使用了,不过烧写完程序后,第二次居然烧写不了程序,必须把boot0拉高才能再次写程序,可是我总不能来回把boot0拉高拉低地切换,太麻烦了! |
为什么非要这2个口呢?不能避开吗? |
不可避免,不是我的设计的硬件,是别人的 |
自己修改一下 |
跳线, |
__HAL_AFIO_REMAP_SWJ_NONJTRST();搞掂了 |
需要添加什么头文件吧,我这直接调用会编译出错 |
为什么非要这2个口呢?不能避开吗? |
开映射就行 |
cube remap的代码有bug 直接读取寄存器就写回寄存器 remap的寄存器不是都能读的 写回去当然会出问题 jtag 设置 sw 模式 下次就不能下载程序了 需要用boot0来设置回来 可以在代码中的初始化完成后 加一段端口映射的代码切换到sw模式就好使了 原因就是remap的代码像shit一样 |