gd32f470总结

这篇博客详细介绍了GD32F470的开发资料位置,包括电路板资料、编程手册、数据手册等。讨论了芯片的手册资源,如Timer、Connectivity模块,以及GPIO、ADC、DAC、CAN、网口RMII等硬件接口。提到了在使用Keil5时遇到的问题及解决方法,并分享了工程配置和JLink连接的注意事项。此外,还涵盖了USB、IIC、IIS、SDIO、SPI、SDRAM、SPI Flash、LCD等接口的使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Gd32f470zkt6资料位置
电路板资料
E:\development\GD32\开发板资料
GD32F4xxSeries\GD32F4xx_Demo_Suites_V2.6.1\GD32470Z_EVAL_Demo_Suites\Docs\Schematic

编程手册
E:\development\GD32\数据手册及用户手册\GD32F4xx系列\编程手册

数据手册 各io 多少个spi等
E:\development\GD32\数据手册及用户手册\GD32F4xx系列\数据手册

例程 显示 存在死机bug
E:\code\450z_emWin\Project\TLI_IPA_emWin

芯片手册资源
在这里插入图片描述

此外还有
Timer:timer,systick,watchdog,rtc(实时时钟,插电池用)
Connectivity:usart,uart,iic,spi,sdio,i2s,can,usb,enet,tli,dci
Gpio exmc/sdram adc dac

Cortex-m4 三条ahb总线分别为 i-code d-code 系统总线
有浮点运算功能。
Cortex、M4、M7: 也是内核名称,只不过在ARMv7架构之后都以Cortex来命名。
在这里插入图片描述

Flash code area data area
在这里插入图片描述

Code Area FLASH :程序在这个flash运行时,几乎没有延时, 运行速度以时钟设置为准。
Data Area FLASH: 程序在这段flash运行时,每条语句都有延时, 最后的速度可能是以10M为时钟(举例) 这时候, 如果有与时序相关的语句在此执行(IIC等), 很有可能会出问题。

板上资源
Adc dac
在这里插入图片描述

Can
在这里插入图片描述

网口和rmii
在这里插入图片描述

Rmii
RMII(Reduced Media Independant Interface),精简MII接口,节省了一半的数据线。RMII收发使用2位数据进行传输,收发时钟均采用50MHz时钟源。
在这里插入图片描述
在这里插入图片描述

其中CRS_DV是MII中RX_DV和CRS两个信号的合并,当物理层接收到载波信号后CRS_DV变得有效,将数据发送给RXD。当载波信号消失后,CRS_DV会变为无效。在100M以太网速率中,MAC层每个时钟采样一次RXD[1:0]上的数据,在10M以太网速率中,MAC层每10个时钟采样一次RXD[1:0]上的数据,此时物理层接收的每个数据会在RXD[1:0]保留10个时钟。

补充mii
在这里插入图片描述
在这里插入图片描述

MAC 通过MIIM 接口读取PHY 状态寄存器以得知目前PHY 的状态。例如连接速度、双工的能力等。也可以通过 MIIM设置PHY的寄存器达到控制的目的。例如流控的打开关闭、自协商模式还是强制模式等。MII以4位半字节方式传送数据双向传输,时钟速率25MHz。其工作速率可达100Mb/s。当时钟频率为2.5MHz时,对应速率为10Mb/s。MII接口虽然很灵活但由于信号线太多限制多接口网口的发展,后续又衍生出RMII,SMII等。

Gdlink-usb
自带了下载模块gdlink
使用gd32f103来作为仿真芯片。
Usb口是cn100,屏幕下面这个
板子也有jlink,我们现在不用gdlink,用jlink。
在这里插入图片描述

Iic
在这里插入图片描述

5v转3.3

Iis
在这里插入图片描述

Sdio
在这里插入图片描述

Sdram
在这里插入图片描述

Spiflash
在这里插入图片描述

Lcd
注意原理图,接线只有rgb565,没有rgb888
在这里插入图片描述

Usart
在这里插入图片描述

Usb hs fs 注意
从下面电路图看到,usb-hs高速外接了芯片usb3300,usb-fs全速不需要外接芯片,直接接到cpu上
Usb-hs是高速 fs全速

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

应用经验

遇到问题
Keil5安装pack还找不到芯片
方法1
在这里插入图片描述

nordic官网解释:You are trying to open up a Keil 4 project in Keil 5, and then it looks in the Legacy Device Database for the target. For some reason the xxAC chip is missing in this database. However, you should be able to just ignore the warning message. The project should compile just fine. You can also open the Keil 5 project in the arm5_no_packs folder, and the warning message should go away.

问题出在了mdk5打开keil4工程的不兼容。
解决办法:https://www2.keil.com/mdk5/legacy/

下载MDK v4 Legacy Support
其功能:
MDK Version 5 uses Software Packs to support a microcontroller device and to use middleware. To maintain backward compatibility with MDK Version 4 you may install Legacy Support. This might be necessary for two reasons:
To maintain projects created with MDK Version 4 without migrating to Software Packs.
To use older devices that are not supported by a Device Family Pack.
MDK版本5使用软件包来支持微控制器设备并使用中间件。为了保持与MDK版本4的向后兼容性,您可以安装传统支持。这可能有两个原因:
维护使用MDK版本4创建的项目,而不迁移到软件包。
使用设备系列包不支持的旧设备。
在这里插入图片描述

使用迅雷下载会更快

最终,项目可以编译。打开项目时弹框依然会弹出,但是没影响了。
不知道怎么样彻底解决弹框。

方法2
在这里插入图片描述

这个方法实测ok

板子供电和仿真
接上面,可5v电源供电,也可usb供电。Usb使用电源插孔旁边那个
这里用usb连电脑供电。
工程里使用jlink和sw都可以
在这里插入图片描述

要选flash
在这里插入图片描述

这里可能会提示选芯片,没有470,选450即可。
在这里插入图片描述

这里要选470

Jflash连不上问题
据说是因为470这个片子才新出的,自己装的不支持,用他们提供的资料里的jflash
应检验可以,放到了
C:\Program Files (x86)\SEGGER\JlinkARM绿色版\JLink_V640
在这里插入图片描述

在里面也会提示选芯片,470没有选450即可。

### GD32F470ZKT6 单片机实现微秒级延迟函数 对于GD32F470ZKT6单片机而言,可以利用定时器来实现精确的微秒级延时功能。下面提供了一种基于TIMx定时器配置的方式来进行微秒级别的延时操作。 #### 配置定时器用于微秒延时 为了创建一个能够执行微秒级别延时的功能,在初始化阶段需设置好相应的定时器参数: ```c void TIM_Config(void) { __HAL_RCC_TIM2_CLK_ENABLE(); //使能定时器2时钟 TIM_HandleTypeDef htim; htim.Instance = TIM2; //选择定时器实例 htim.Init.Prescaler = SystemCoreClock / 1000000 - 1; //预分频系数设定为达到每计数一次等于1us htim.Init.CounterMode = TIM_COUNTERMODE_UP; //向上计数模式 htim.Init.Period = 0xFFFF; //自动重装载值设最大 htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; //不分频 htim.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim) != HAL_OK){ /* Initialization Error */ while(1); } } ``` 此部分代码完成了对定时器的基础配置工作,其中`Prescaler`被调整至使得每次溢出代表一微秒的时间间隔[^1]。 #### 编写微秒延时函数 有了上述准备之后,就可以定义具体的延时函数了: ```c void delay_us(uint32_t us) { uint32_t ticksstart = __HAL_TIM_GET_COUNTER(&htim); //获取当前计数值 uint32_t wait = us; //等待时间(us) // 获取当前滴答中断计数值 uint32_t tickstart = HAL_GetTick(); while ((uint32_t)(__HAL_TIM_GET_COUNTER(&htim)-ticksstart) < wait){} //当差值小于所需等待时间则继续循环 } ``` 这段代码实现了精准控制下的微秒级延时效果,通过不断读取定时器计数值并与起始时刻做比较直到满足指定条件为止。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值