(转)STM32移植到GD32的问题

[复制链接]
663|10
 楼主 | 2018-6-13 14:22 | 显示全部楼层 |阅读模式

1、GD32采用ADC同步注入方式时,需要同时配置ADC1和ADC2;

但是只有当ADC时钟分频为6时,才可以执行;大于分频6时,程序会卡死在ADC_GetBitState(ADC1,ADC_FLAG_EOIC)中;

2、ADC1和ADC2同步注入时,出现ADC2通道的采样值一直为零。

需要同时对ADC1和ADC2同时都配置,才能够采样的。(再对硬件板子重新焊接之后就好了)

2.1 利用TIM1的TRGO触犯ADC的采样,TIMER_RepetitionCounter参数设置为1,但是实际触发频率是3个PWM触发一次ADC采样

实际测试条件:内部时钟64MHZ,ADC时钟6分频(对应的ADC的时钟频率不为整数),TIM1不分频;

       问题解决:改变ADC的时钟频率,使得其为整数,即可实现一次PWM周期触发ADC采样一次;

2.2 关于利用TIM1的TRGO和CH4通道触发ADC的同步采样,有时候会出现不能触发采样的问题(ADC->STR = 0X0012)

1)利用TRGO触发ADC采样

TIM1分频为8、1和0,ADC分频为4;------仍然会出现有时候不能触发ADC采样的问题

2)利用CH4通道触发

TIM1分频为0,ADC分频为4;------仍然会出现有时候不能触发ADC采样的问题

TIM1分频为8和1,ADC分频为4;------不会出现该问题

3、GPIO_DeInit(GPIOB);函数初始化,只能在第一次使用,如果在初始化相关的IO口,再次使用GPIO_DeInit(GPIOB)该函数,会导致之前配置的IO出现问题。

4、GD32的串口配置加上ADC配置之后的函数,容易出现ORE过载错误,导致无法进入中断。

USART_DataSend(USART3, *Data++);
while(USART_GetBitState(USART3, USART_FLAG_TC)==ERROR){};顺序改为这个就可以正常发送数据了。

5、注意bool类型的定义,否则会导致定义的变量数值不对。

6、读取Hall信号的IO口时,发现输入IO口的信号存在中间阶梯的情况,导致读取信号不对

芯片引脚虚焊导致的该问题。


7、同样的简单测试程序GD32和ST32完全兼容的芯片移植时,需要重新选择芯片配置(在主菜单中打开Flash->Configure Falsh Tools配置窗口,切换到“Utilities"页。按“Setting"按钮进入“Flash download setup"配置窗口,然后一路按“OK”按钮退出配置窗口在“Flash download setup"配置窗口点击“Add”按钮进入“Add Flash Programming Algorlthm"窗口在“Add Flash Programming Algorlthm"窗口),否则会出现“”Error: Flash Download Failed-"Cortex-M3" “”下载烧录错误。

8、GD32F130C8T6和GD32F103C8T6的区别---20171013

1)二者开发时,所用的固件开发库是不一样的()。

        2)芯片的时钟频率(48MHZ和108MHZ)也不一样,Flash和SRAM大小也不一样;

3)芯片的引脚35、36不一样(F130:PF6、PF7【I2C2_SCL、I2C2_SDA】;F103:VSS2、VDD2)

4)芯片的引脚2、10复用的功能不一样的

5)F130中含有1个ADC,最多只能采样4路;F103中含有2个ADC,最多只能采样8路;


| 2018-6-13 14:39 | 显示全部楼层
设置了同步注入模式,可是触发方式选择什么呢。能否简单的说明下同步注入 模式的初始化配置流程
| 2018-6-13 14:40 | 显示全部楼层
在数据手册上只有ADC1有注入数据寄存器,而ADC2是没有的。但是在库函数中发现有 ADC_GetInjectedConversionValue这样一个函数,用这个是否能读出ADC2注入 组的数据呢
 楼主 | 2018-6-13 14:41 | 显示全部楼层
wakayi 发表于 2018-6-13 14:39
设置了同步注入模式,可是触发方式选择什么呢。能否简单的说明下同步注入 模式的初始化配置流程 ...

选择自动注入就可以,注意不可能同时使用自动注入和间断模式。
 楼主 | 2018-6-13 14:42 | 显示全部楼层
xiaoqizi 发表于 2018-6-13 14:40
在数据手册上只有ADC1有注入数据寄存器,而ADC2是没有的。但是在库函数中发现有 ADC_GetInjectedConversion ...

此模式转换一个注入通道组。外部触发来自ADC1的注入组多路开关(由ADC1_CR2寄存器的JEXTSEL[2:0]选择),它同时给ADC2提供同步触发。
| 2018-6-14 13:08 | 显示全部楼层
wowu 发表于 2018-6-13 14:41
选择自动注入就可以,注意不可能同时使用自动注入和间断模式。

感谢楼主耐心的解答
| 2018-6-14 13:48 | 显示全部楼层
wowu 发表于 2018-6-13 14:42
此模式转换一个注入通道组。外部触发来自ADC1的注入组多路开关(由ADC1_CR2寄存器的JEXTSEL[2:0]选择),它 ...

好的好的 谢谢
 楼主 | 2018-6-14 13:49 | 显示全部楼层
不客气 欢迎提问题
| 2018-6-14 13:51 | 显示全部楼层
关于CH4通道触发的问题 厂家还是没有解决吗
 楼主 | 2018-6-14 20:18 | 显示全部楼层
不好解决   貌似还有
| 2018-6-20 22:40 | 显示全部楼层
这些都是非常不错的问题解决办法总结的,赞一个
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

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

论坛热帖

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