为了验证GD32F130C8与ST的兼容性,版主本次做了串口发送的实验。我们知道STM32系列单片机的串口1外设(USART1)为了向下兼容全用的是PA9=>TXD引脚,PA10=>RXD引脚,而我们的GD32F130C8也不例外。
Printf函数的编写是我们程序调试的一个基础——当然,这个观点现在已经被强大的jlink所取代。在stm32f103的开发板上移植这个示例并不难,也相当简单,但是版主这次在GD32F130C8开发板却花掉了不少的时间。想知道哪里耽误了版主宝贵的时间了吗?且听慢慢道来。
版主依然使用的是ST官方的STM32F0xx固件库,参照了其官方的说明文档与示例,可问题就是出在了官方的示例里。
在官方的示例里,串口初始化的程序并没有时钟配置与引脚初始化的程序,于是版主“果断”也没配置这两个必须要配置的参数。
然后,版主就凌乱了好久……
在确认硬件正常后,版主放弃了ST官方的示例,阅读了GD32F1x0系列说明,开始一步一步的配置。将未配置的时钟与引脚初始化添加后,串口便打印出来了期待已久的信息。
不多说了,版主将源代码与工程文件一齐上传上来。
源代码:
void UartConfig(uint32_t band) { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1, ENABLE); /* Connect pin to Periph */ GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1); /* Configure pins as AF pushpull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = band; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); }
工程文件: