打印

中科之旅------GD32 研发过程中遇到的问题(转载)

[复制链接]
2827|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1.GD32 gpio配置问题,pc7作为timer7_ch1
在GD32F303xx_Datasheet_Rev1.2里看到

而在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中。

沙发
木木guainv|  楼主 | 2018-10-26 15:45 | 只看该作者
3.GD32 DAC如何确定输出电压?

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

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



改用ch3搞定


使用特权

评论回复
板凳
木木guainv|  楼主 | 2018-10-26 15:46 | 只看该作者
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可以


使用特权

评论回复
地板
木木guainv|  楼主 | 2018-10-26 15:47 | 只看该作者
6.之前参考example里的running_led去操作gpio发现不对,看了数据手册发现





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



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

虽然数据手册上是



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


使用特权

评论回复
5
木木guainv|  楼主 | 2018-10-26 15:47 | 只看该作者

7.

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

9.

添加#include <stdio.h>


10.

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


使用特权

评论回复
6
木木guainv|  楼主 | 2018-10-26 15:48 | 只看该作者
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的时候务必注意下图



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


使用特权

评论回复
7
木木guainv|  楼主 | 2018-10-26 15:48 | 只看该作者
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); 一定要使能这个,因为原来的库函数里不使能,而且数据手册很坑爹
}


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



14,关于管脚复用




使用特权

评论回复
8
木木guainv|  楼主 | 2018-10-26 15:49 | 只看该作者
15.gd的startup.s中可能会漏中断



少了64号中断

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



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



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


使用特权

评论回复
9
木木guainv|  楼主 | 2018-10-26 15:50 | 只看该作者
17.中断里用计数循环的话变量要定义成全局变量,这样会保持之前的值



18.keil配置gd405的时候



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



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

rcu_periph_clock_enable(RCU_GPIOA);



20.i2s开发遇到的问题

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

还有个问题就是DMA和i2s直通,由于我配置的不是i2s1_add而是spi1,所以DMA这边通道要选



通道4的功能0而不是功能2

还有spi那边要把发送缓冲区DMA使能


使用特权

评论回复
10
liuqiangdong| | 2018-10-30 12:05 | 只看该作者
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

使用特权

评论回复
11
木木guainv|  楼主 | 2018-11-5 17:19 | 只看该作者
感谢您的反馈呀

使用特权

评论回复
12
heimaojingzhang| | 2018-11-8 13:22 | 只看该作者
很详细感谢分享

使用特权

评论回复
13
firstblood| | 2018-11-10 21:19 | 只看该作者
这几点的还是好好的学习下的吧

使用特权

评论回复
14
chuntian2016| | 2018-11-11 21:44 | 只看该作者
不管怎样,定时器的正确使用才是关键

使用特权

评论回复
15
vibra2016| | 2018-11-25 10:39 | 只看该作者
gd32的开发还是有点难度的哈

使用特权

评论回复
16
木木guainv|  楼主 | 2018-12-3 15:30 | 只看该作者
主要这个是新东西 所以接触的人少 就显得难

使用特权

评论回复
17
三番| | 2019-3-8 15:24 | 只看该作者
你好 可否借鉴 GD32F405 ADC DMA的程序  还有请教个问题 串口发送数据 第一次发送数据丢失怎么解决

使用特权

评论回复
18
cooleaf| | 2019-3-8 21:51 | 只看该作者
GD32F103的库问题多吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

148

主题

4100

帖子

5

粉丝