前言
近期搞到一块GD32F103c8t6的开发板,号称是和STM32F103C8T6 Pin To Pin兼容的,查了一些资料,很多老哥也搞过类似的测试,多半结果是不兼容,具体哪里不兼容,哪些共功能不兼容,老哥们基本不说,所以我来把基础的功能测试一下,看哪些兼容哪些不兼容;
目标
本次测试功能:
- GPIO的输入输出
- 串口发送接收
- SPI总线的数据发送
- PWM输出
- RTC
这几部分都是很基础很基础的功能,所以CubeMX的配置我就不发了,大概说明一下,IO输出是PC13,IO输入是PA0,串口TX是PA9,RX是PA10;
配置过程我将按键(输入点)添加了内部下拉电阻
LED添加了上拉电阻(输出点),其余为默认,晶振使用8MHz的外部晶振,系统主频为72MHz,串口配置为波特率115200bps,数据位8,停止位1,无校验;
SPI使用的是SPI1,分频系数为32,其余默认即可,此次使用SPI控制0.96寸的OLED显示屏进行全亮和全灭控制,可由此得到SPI的发送功能是否健全;
PWM使用LED灯实现呼吸灯效果
RTC看时间是否能够正常按时间变化
GPIO硬件如图所示
串口我直接用TTL电平输出,我自己有TTL转USB的设备;
方案
代码功能很简单,按下按键(输入点为高电平),A寄存器自加,LED点亮(输出点为低电平)
每次刷新间隔500ms
每500ms发送一次 ASWaterbenben
串口接收中断回调则是将串口接收到的数据原模原样的发送回去;数据接收完毕的标记为回车符"0x0A";
main.c文件的主函数如下所示
int main(void)
{/* USER CODE BEGIN 1 */uint8_t Data[15] = {'A','S','W','a','t','e','r','b','e','n','b','e','n','\r','\n'};/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_RTC_Init();MX_TIM1_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */HAL_UART_Receive_IT(&huart1,MRxBuff_A,1);//启动串口中断/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)){if(A<0xFFFFFFFF){A++;}else{A=0;}HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin,GPIO_PIN_SET);}else{if(A<0xFFFFFFFF)B++;elseB=0;HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin,GPIO_PIN_RESET);}HAL_UART_Transmit(&huart1,Data,15,100);HAL_Delay(500);}/* USER CODE END 3 */
}
串口中断回调函数如下:
if(MRxBuff_A[0] != 0x0A)//没有接收到回车符{if(count < 256){U1_Receive[count++] = MRxBuff_A[0];}else{count = 0;U1_Receive[count++] = MRxBuff_A[0];}}else//接收到回车符{U1_Receive[count++] = MRxBuff_A[0];HAL_UART_Transmit(&huart1,U1_Receive,sizeof(U1_Receive),1000);count = 0;}HAL_UART_Receive_IT(&huart1, MRxBuff_A, 1);
测试
测试结果:
- 按键测试
按下按键,A寄存器自加,B寄存器无动作
松开按键,B寄存器自加,A寄存器无动作
按键(GPIO输入测试成功,输入点可完美匹配)
- LED测试
按键按下,LED亮
按键松开,LED熄灭
经测试,GPIO输出点完全适配;
- 串口发送测试
每500ms发送一次ASWaterbenben
频率基本一致,串口发送可适配
-
串口接收测试
从PC发送不愧是我后面带回车符号,串口能正常返回,说明串口接收正常! -
OLED的显示效果如下:
OLED屏能按要求闪烁,说明SPI总线发送功能正常 -
PWM呼吸灯效果
7.RTC时间效果
总结
总结如下:
功能 | 适配结果 | 备注 |
---|---|---|
GPIO输入 | 匹配 | |
GPIO输出 | 匹配 | |
串口发送 | 匹配 | |
串口接收 | 匹配 | |
SPI发送 | 匹配 | |
PWM输出 | 匹配 | |
RTC | 匹配 |
接下来几期博客会继续往后测试基础功能,敬请期待!