问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32F103VET6替换同型号STM32,并口写入数据有问题

替换 GD32F103VET6

GD32F103VET6替换同型号STM32,并口写入数据有问题

西加加2026-03-23
如题,原先使用STM32VET6  使用FSMC接口写入/读写外部的SRAM芯片,正常,使用8位数据位读写(外部SRAM芯片仅支持8位数据位),地址总线和数据总线复用。地址线使用到a0-a11;

都是使用的是STM32的HAL库。

STM32写入时,先写入地址,在写入数据,但在写入数据期间,因为是复用的,AD0-AD7由地址数值切换为数据数值,而AD8-AD11仍保持高地址数值;数据可以正常写入到外部的SRAM芯片中;

但是替换为GD32后,写入数据时,在写入数据期间,AD8-AD11会直接输出低电平,就会导致数据不会写入到AD8-AD11为一的地址上;(写入地址的时候,AD8-AD11会输出对应的高低电平,但是到写入具体数据时,AD8-AD11会直接输出低电平)

举一个例子,例如我向0x60000303写入数据0x11;
STM32可以在0x60000303写入数据0x11;
而GD32由于上面说的在写入数据的时候,AD8-AD11总是输出0,所以就会向0x60000003的地址上写入了0x11,无法正常向0x60000100-0x600007FF写入数据。

GD32可以正常向低地址上写入数据,读数据均正常(低地址/高地址均可读出正确数据);目前的问题就是GD32无法在写入具体数据的周期中,无法保证AD8-AD11的状态导致的问题。

请问是否有办法通过修改gd32的寄存器的方式或者设置,直接实现正常向高地址写入数据。
回答 +关注 1
558人浏览 2人回答问题 分享 举报
2 个回答
  • 感谢您的回复,我刚才去看了一下GD官方的代码,对了一下,他例子里面用的是16位数据位,我的外设是8位,我之前试过用16位数据位,数据高8位写入的数据是地址位的高位,数据到是能写入到高地址上,但写入的位置是错的,也不排除是用了16位数据位,导致读数据出出现了问题。
  • 你可以看看芯片固件库,看是否有你需要的demo代码,GD32应该就是EXMC外设:
    微信图片_20260324090126.png

您需要登录后才可以回复 登录 | 注册