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

[复制链接]
347|13
 楼主 | 2018-10-26 15:45 | 显示全部楼层 |阅读模式
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中。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 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搞定


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 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可以


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-10-26 15:47 | 显示全部楼层
6.之前参考example里的running_led去操作gpio发现不对,看了数据手册发现





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



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

虽然数据手册上是



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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-10-26 15:47 | 显示全部楼层

7.

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

9.

添加#include <stdio.h>


10.

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


 楼主 | 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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 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,关于管脚复用




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-10-26 15:49 | 显示全部楼层
15.gd的startup.s中可能会漏中断



少了64号中断

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



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



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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 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使能


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 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
 楼主 | 2018-11-5 17:19 | 显示全部楼层
感谢您的反馈呀
| 2018-11-8 13:22 | 显示全部楼层
很详细感谢分享
| 2018-11-10 21:19 | 显示全部楼层
这几点的还是好好的学习下的吧
| 2018-11-11 21:44 | 显示全部楼层
不管怎样,定时器的正确使用才是关键
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表