GD32F417VET6是属于GD32F4xx系列基于ARM Cortex-M4处理器的32位通用微控制器,性价比较高。
1.使用该芯片设计可以基于现有的F4系列的固件库,启动文件选用startup_gd32f407_427.s稍做修改,因为417主频是180M,需要在system_gd32f4xx.c文件中添加系统时钟初始化180M,硬件选择GD32F427R-START来测试。
2.复制粘贴system_clock_200m_25m_hxtal()这个函数,修改成180M。
3.参考芯片时钟树和用户手册设置PLL寄存器的PLLPSC,PLLN,PLLP,PLLQ参数值,注意PLLSC,PLLN,PLLP,PLLQ参数的取值范围。VCO时钟源频率要求在1M到2M之间,外部晶振25M,分频系数PLLPSC(时钟树PSC)通常取值为25。
4. 修改system_clock_180m_25m_hxtal()函数中RCU_PLL寄存器参数,使主频为180M.
取PSC=25,PLL_N=360,PLL_P=2,PLL_Q=8 计算公式:((25M/PSC)*PLL_N)/PLL_P=180M
5. 主频180M设置好了之后,如何满足USB时钟48M呢,((25M/PSC)*PLL_N)/PLL_Q=45M,显然不行。由于PLLSC,PLLN,PLLP,PLLQ参数的取值范围都有限制,是凑不出来既满足主频180M,又满足USB 48M的。查看时钟树,USB有三种时钟配置方式,接下来看PLLSAI。
6. 根据PLLSAI寄存器的设置说明,取PLLSAIN=96,PLLSAIP=2,USB时钟:((25M/PSC)*PLLSAIN)/PLLSAIP=48M,理论上是可行的,下面写程序测试一下。
7. 测试选GD官方的cdc_acm例程,前面已经将启动文件改成startup_gd32f407_427.s,配置好主频180M,修改函数usb_rcu_config(),配置USB时钟为48M。
8. 编译下载到GD32F427R-START开发板,打开电脑设备管理器,显示COM9已被识别。
9. 现在来测试USB时钟的第三种配置方式,内部时钟,程序如下,经测试结果正常。不论连接电脑的哪个USB口,均被识为同一串口,这里是com9。