控制/MCU
GD32作为国产MCU里的佼佼者,产品线也比较丰富,是替代STM32的一个很好的选择。前段时间有个项目用到GD32的单片机,今天来说说使用的一些体会。 1.硬件我用的单片机型号为GD32F405RGT6,对应STM32F405RGT6。首先,硬件上基本兼容,有一点不同的是GD32的31和47脚为NC,STM32的为VCAP。STM32这两个引脚需要分别连接一个电容到GND,而GD32则不需要。当然,有这两个电容也无所谓,所以,硬件上GD32可以直接替换STM32。
HAL_UART_Transmit_DMA(&huart1,tx_buffer,64);
而GD的库没有现成的函数,需要自己去实现:类似的还有很多,比如I2C读写24Cxx系列EEPROM的函数,HAL库中也封装好了函数:void usart_dma_transmit(uint8_t *pData,uint32_t num)
{
usart_flag_clear(USART0, USART_FLAG_TC);
dma_channel_disable(DMA1, DMA_CH7);
dma_flag_clear(DMA1, DMA_CH7, DMA_FLAG_FTF);
dma_memory_address_config(DMA1, DMA_CH7, DMA_MEMORY_0, (uint32_t)pData);
dma_transfer_number_config(DMA1, DMA_CH7, num);
dma_channel_enable(DMA1, DMA_CH7);
}
GD的库也需要自己去实现,官方虽然也提供了相关的例程,但是只支持24C02等8位地址的器件,24C64等16位地址的器件就需要自己修改了。当然,HAL库虽然好用,但是效率很低。记得之前做一个低功耗的东西,用STM32L151,主频设置的较低,使用HAL库回调函数的方式写串口中断程序,竟然会出错。后来中断部分改为寄存器操作才正常了,可见其效率低下。 其次,两者的命名方式不一样。HAL库中时钟叫RCC_xxxx,而GD的库中时钟叫RCU_xxxx。还有,HAL库中的外设标号是从1开始的,比如USART1、USART2…,而GD库的外设标号是从0开始的,USART0、USART1…。用惯了ST库的朋友们,这一点在使用时要特别注意。 最后,实现相同功能的程序,两者编译后的大小也有区别。GD库编译后的大小如下:HAL_I2C_Mem_Write(&hi2c1, AT24Cxx_ADDR_WRITE, addr, I2C_MEMADD_SIZE_16BIT, dat, size, 0xFFFFFFFF);
HAL_I2C_Mem_Read(&hi2c1, AT24Cxx_ADDR_READ, addr, I2C_MEMADD_SIZE_16BIT, recv_buf, size, 0xFFFFFFFF);
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !