兆易创新的GD32系列芯片,是需要进行国产化芯片替代的优质选择。项目开发需要本人有幸参与,下面分享一些感受。 下面是本人在开发过程中遇到的一些感受: (1)函数封装不够完整—串口。GD32使用的函数没有STM32的HAL库那样封装的完整,比如官方提供的串口数据传输函数usart_data_transmit,每次只能传输一个字节,如果想要大量进行数据传输,需要自己封装函数,即需要自己判断标志位,串口的中断传输以及DMA传输是同样的道理。 (2)函数封装不够完整—I2C。同样是GD32函数封装不够完整的问题,GD32的I2C使用稍微复杂,基本的时钟、IO口等配置与其他外设是一样的,但是由于I2C的时序步骤比较多,比如起始、停止,应答等等,而官方仅仅给出了起始、停止、应答等步骤的函数(比如停止是i2c_stop_on_bus),因此完整的I2C时序需要将这些拼起来。官方的EEPROM例程里面给出了对应的函数,是比较好用的(推荐)。 (3)GD32官方例程可能无法直接使用。官方例程不好用的时候不要着急,首先需要看软硬件配置是否正确,而且最好直接使用官方提供的工程进行开发,硬件通了之后再进行移植。本人遇到的问题是开发USB的时候发现使用官方例程,电脑无法识别GD32的USB口,后来发现是时钟的问题,USB必须使用48M时钟,但是官方例程在不配置的情况下系统时钟是乱的,需要进行配置。同时官方例程是基于8M的外设时钟,如果自己使用的不是8M的时钟,同样需要进行配置。至于配置方法网上有很多。 (4)堆栈溢出问题。如果进行大规模程序开发可能会遇到堆栈溢出的问题,这个问题不算是GD32特有的问题。可以在.s文件、即启动文件里面修改Stack_Size以及Heap_Size,如果局部变量用的很多,函数中有大量的矩阵相乘,需要增多Stack_Size。堆栈溢出的现象表现为加入一段代码之后发现程序跑飞了,即使用debug模式,运行到某一步也运行不下去了,这时候就需要考虑是堆栈溢出的问题。 本人强烈建议,外设开发能使用官方例程就使用官方例程。这里也推荐两个视频教程:B站的“郭天祥老师”以及“高博士_嵌入式”的GD32教学视频,对于GD32初期的开发非常有帮助,也感谢两位UP主的分享。 如有错误请批评指正!
|