ss1969 发表于 2017-1-12 17:24:33

请使用F103VET6板子的朋友帮忙验证一个系统BUG~~

本帖最后由 ss1969 于 2017-1-12 17:25 编辑

环境:
   HAL库, F1系列1.40版
   STM32F103VET6
   使用双线的ST-Link

BUG:
    使用PB345作为SPI端口,连接一颗W25Q16
    CubeMX生成代码,如果使用SPI1,则会造成Init SPI后,STlink无法下载代码(Keil 5里面报告找不到Target),此时SPI1是正常工作的可操作Flash。
    如果使用SPI3则一切正常。后来跟踪发现,只要调用了_HAL_AFIO_REMAP_SPI1_ENABLE就会出问题。
    以下是简化的main.c,启动5秒内,正常下载;5秒后,Stlink无法连上。

有同样环境的朋友希望可以试一试。


Tcreat 发表于 2017-1-13 09:52:39

本帖最后由 Tcreat 于 2017-1-13 10:35 编辑

对照数据手册引脚图 就知道了    PB3/PB4是编程复用口特别是PB4 在SWD 和 JTAG编程模式下 都是要占用的然而你使能映射的PB3和PB4我想应该是关掉的JTAG和SWD仿真口导致的
以下来自 原子论坛帖内容:

设置为SW模式时,PB3管脚在跟踪时为TRACESWO信号,cpu软件复位也不会清除,需断电才能再次使用。所以需要关闭跟踪。

否则在进入调试后,PB3管脚不受ODR控制。

http://www.openedv.com/data/attachment/forum/2014/4/16/83a434f7aee371d715314b7f83161c92_407.jpg
关于寄存器:
3个控制位用来配置SWJ-DP 接口的引脚,这3个位在系统复位时复位。
● AFIO_MAPR(STM32F10xxx微控制器中的地址是0x40010004)
─   读:APB,无等待状态
─   写:APB,如果AHB-APB桥的写缓冲器满了,则一个等待状态
位26:24=SWJ_CFG
由软件置位和复位
这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模式



JackieLaura 发表于 2017-1-13 09:58:34

本帖最后由 JackieLaura 于 2017-1-13 10:02 编辑

Tcreat 发表于 2017-1-13 09:52
对照数据手册引脚图 就知道了    PB3/PB4是编程复用口特别是PB4 在SWD 和 JTAG编程模式下 都是要占用的   ...
应该是SWD接口还能使用,还能继续仿真。。。PA13、PA14未使用就可以

Tcreat 发表于 2017-1-13 10:18:46

本帖最后由 Tcreat 于 2017-1-13 10:32 编辑

JackieLaura 发表于 2017-1-13 09:58
应该是SWD接口还能使用,还能继续仿真。。。PA13、PA14未使用就可以
看网上说 SWD模式 PB3默认是调试跟踪需要关闭调试跟踪 才行 不然 PB3也是无法用的不管怎么说 他这现象始终是与仿真口冲突造成的 并不是什么杂症稍微百度下就知道了

creep 发表于 2017-1-13 10:33:20

二狗哥,这你要直接上代码啊,让有条件的同学直接下载测试下看是不是和你的情况一样。

Tcreat 发表于 2017-1-13 10:35:53

creep 发表于 2017-1-13 10:33
二狗哥,这你要直接上代码啊,让有条件的同学直接下载测试下看是不是和你的情况一样。 ...

无所上代码 就是编程口占用的问题   :lol

creep 发表于 2017-1-13 11:17:11

Tcreat 发表于 2017-1-13 10:35
无所上代码 就是编程口占用的问题

小猪老师厉害,学习了。。

ss1969 发表于 2017-1-13 11:55:05

Tcreat 发表于 2017-1-13 10:35
无所上代码 就是编程口占用的问题

问题在于~~ 我用SPI3的时候,也是占用了PB3、4、5的,这个时候SPI3工作正常(能读写w25q)
而且,同时,Serial Wire模式下载正常(使用ST Link)
所以 并 不 是 占用编程口的问题。

ss1969 发表于 2017-1-13 11:55:27

本帖最后由 ss1969 于 2017-1-13 12:04 编辑

Tcreat 发表于 2017-1-13 10:35
无所上代码 就是编程口占用的问题
补充一下Serial wire模式应该是不使用PB4的。

出现这个问题之后,我用Jlink + 飞线的方式,可以下载,此时也不需要接PB4(nTRST),只需要多接上TDI,TDO和nSRST即可!


ss1969 发表于 2017-1-13 11:57:47

creep 发表于 2017-1-13 10:33
二狗哥,这你要直接上代码啊,让有条件的同学直接下载测试下看是不是和你的情况一样。 ...

我已经直接上了呀。
就在main里面加一句就能出bug了
但我不确定如果不上W25Q16,会不会也会出现这个问题。
页: [1]
查看完整版本: 请使用F103VET6板子的朋友帮忙验证一个系统BUG~~