中科之旅------GD32 研发过程中遇到的问题

1.GD32 gpio配置问题,pc7作为timer7_ch1

在GD32F303xx_Datasheet_Rev1.2里看到

中科之旅------GD32 研发过程中遇到的问题

而在GD32F30x_User_Manual_CN_V1.1里则找不到一点pc7的资料,所以认为,由于这个gpio没有remap的功能,所以GD32F30x_User_Manual_CN_V1.1里就不特别说了,而如果要复用哪个功能就得先使能那个功能模块。

 

2.一开始不知道GD32的中断函数定义在哪,原来在

C:\Users\Administrator\Desktop\ZKSS\GD32系列开发\GD32303C_START_GD32F30x_Firmware_Library_Routine_ANC\GD32303C_START_GD32F30x_Firmware_Library_Routine\Project\2_Systick_LED\MDK-ARM\list\GD32303C_START.map中。

 

3.GD32 DAC如何确定输出电压?

如果选择8位的DAC,那么最大值就是2的8次,对应3.3v,如果是选择12位的DAC,那么最大值就是2的12次,最大电压同样是3.3v

4.DAC 和DMA绑定,我用DMA ch1去绑定DAC1,发现不行直到看了这个图

中科之旅------GD32 研发过程中遇到的问题

改用ch3搞定

 

4.用DAC+DMA功能的时候,DMA那边配置为DMA_PERIPHERAL_WIDTH_32BIT的时候,出现了奇怪的现象,DAC只能8bit有效,哪怕地址是R12的地址,只有用DMA_PERIPHERAL_WIDTH_16BIT的时候才是12位地址有效

6.EEPROM一直读不出正确值,看了spec发现

This pin must be connected to either VSS or VCC. If tied
to VSS, write operations are enabled. If tied to VCC,
write operations are inhibited but read operations are
not affected
 

5.用ADC自带的测温度功能,发现ADC0可以,ADC1不行,查了手册

然后问了技术支持确认只有ADC0可以中科之旅------GD32 研发过程中遇到的问题

 

6.之前参考example里的running_led去操作gpio发现不对,看了数据手册发现

 

中科之旅------GD32 研发过程中遇到的问题

原来这里才是拉高拉低的正确方式

 

7.gd32 f303的can的波特率计算有问题

虽然数据手册上是

中科之旅------GD32 研发过程中遇到的问题

然而最后算下来,其实真正波特率是这个的1/2,。。。。。,而且误差必须控制在千分之5,比如500k的要求要千分之4左右

 

7.中科之旅------GD32 研发过程中遇到的问题

gd405工程编译遇到错误就把这些文件拷到这个目录即可

9.

中科之旅------GD32 研发过程中遇到的问题

添加#include <stdio.h>

 

10.

中科之旅------GD32 研发过程中遇到的问题

遇到这个问题,就重装keil到c盘然后把patch也放在keil目录下安装,安装目录也选择c盘的keil已经安装好的目录即可

 

11.gd32f405设置gpio为output高电平,用他的库函数

gpio_mode_set(RCU_GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_8);
    gpio_output_options_set(RCU_GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_8);

    GPIO_BC(RCU_GPIOC) = GPIO_PIN_8;
    GPIO_BOP(RCU_GPIOC) = GPIO_PIN_8;居然连output都设置不了简直垃圾,提醒大家千万注意gd的库错误巨多

后来改用

    GPIO_CTL(GPIOC) = 0x10000;
    GPIO_PUD(GPIOC) = 0x20000;
    GPIO_OCTL(GPIOC) = 0x100;直接写才行了

 

12.配置PLLN的时候务必注意下图

中科之旅------GD32 研发过程中遇到的问题

我之前设置了24结果无效,难怪串口的设置的波特率系数和计算的差一倍。然而后续太狗血了,哪怕plln有效,波特率依然要除以2

 

13.在ADC使用DMA功能的时候要注意

void adc_dma_mode_enable(uint32_t adc_periph)
{
    ADC_CTL1(adc_periph) |= (uint32_t)(ADC_CTL1_DMA);
    ADC_CTL1(adc_periph) |= (uint32_t)(ADC_CTL1_DDM); 一定要使能这个,因为原来的库函数里不使能,而且数据手册很坑爹
}
中科之旅------GD32 研发过程中遇到的问题

该死不死写什么单次模式,其实扫描模式也要使能

 

14,关于管脚复用

中科之旅------GD32 研发过程中遇到的问题

 

15.gd的startup.s中可能会漏中断

中科之旅------GD32 研发过程中遇到的问题

少了64号中断

导致我的DMA中断一直卡在default handler中。。。。。因为本来72的中断向量变成了71.。。。

 

16.之前303的DMA中断正常,但是405不行,后来发现

中科之旅------GD32 研发过程中遇到的问题

405还要设置这个PERIENN。而303不用

 

17.中断里用计数循环的话变量要定义成全局变量,这样会保持之前的值

 

18.keil配置gd405的时候

中科之旅------GD32 研发过程中遇到的问题

要选中这个ic才行,不能只选STM32F405这个大类

 

19.读gpio状态,虽然默认设置是输入,但是时钟一定要开起来

 rcu_periph_clock_enable(RCU_GPIOA);

 

20.i2s开发遇到的问题

首先是时钟,可以选sysclk分频,也可以选外接到I2S_CKIN引脚,然后需要在rcu那边设置一下