GD32利用CubeMX构建代码的测试

文章目录[隐藏]

前言

近期搞到一块GD32F103c8t6的开发板,号称是和STM32F103C8T6 Pin To Pin兼容的,查了一些资料,很多老哥也搞过类似的测试,多半结果是不兼容,具体哪里不兼容,哪些共功能不兼容,老哥们基本不说,所以我来把基础的功能测试一下,看哪些兼容哪些不兼容;

目标

本次测试功能:

  1. GPIO的输入输出
  2. 串口发送接收
  3. SPI总线的数据发送
  4. PWM输出
  5. 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++;
		else
			B=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);

测试

测试结果:

  1. 按键测试
    按下按键,A寄存器自加,B寄存器无动作
    在这里插入图片描述

松开按键,B寄存器自加,A寄存器无动作
在这里插入图片描述
按键(GPIO输入测试成功,输入点可完美匹配)

  1. LED测试
    按键按下,LED亮
    在这里插入图片描述

按键松开,LED熄灭
在这里插入图片描述

经测试,GPIO输出点完全适配;

  1. 串口发送测试
    每500ms发送一次ASWaterbenben
    在这里插入图片描述

频率基本一致,串口发送可适配

  1. 串口接收测试

    从PC发送不愧是我后面带回车符号,串口能正常返回,说明串口接收正常!

  2. OLED的显示效果如下:
    在这里插入图片描述
    OLED屏能按要求闪烁,说明SPI总线发送功能正常

  3. PWM呼吸灯效果
    在这里插入图片描述

7.RTC时间效果
在这里插入图片描述

总结

总结如下:

功能 适配结果 备注
GPIO输入 匹配
GPIO输出 匹配
串口发送 匹配
串口接收 匹配
SPI发送 匹配
PWM输出 匹配
RTC 匹配

接下来几期博客会继续往后测试基础功能,敬请期待!

版权声明:本文为CSDN博主「ASWaterbenben」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ASWaterbenben/article/details/121587854

前言

近期搞到一块GD32F103c8t6的开发板,号称是和STM32F103C8T6 Pin To Pin兼容的,查了一些资料,很多老哥也搞过类似的测试,多半结果是不兼容,具体哪里不兼容,哪些共功能不兼容,老哥们基本不说,所以我来把基础的功能测试一下,看哪些兼容哪些不兼容;

目标

本次测试功能:

  1. GPIO的输入输出
  2. 串口发送接收
  3. SPI总线的数据发送
  4. PWM输出
  5. 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++;
		else
			B=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);

测试

测试结果:

  1. 按键测试
    按下按键,A寄存器自加,B寄存器无动作
    在这里插入图片描述

松开按键,B寄存器自加,A寄存器无动作
在这里插入图片描述
按键(GPIO输入测试成功,输入点可完美匹配)

  1. LED测试
    按键按下,LED亮
    在这里插入图片描述

按键松开,LED熄灭
在这里插入图片描述

经测试,GPIO输出点完全适配;

  1. 串口发送测试
    每500ms发送一次ASWaterbenben
    在这里插入图片描述

频率基本一致,串口发送可适配

  1. 串口接收测试

    从PC发送不愧是我后面带回车符号,串口能正常返回,说明串口接收正常!

  2. OLED的显示效果如下:
    在这里插入图片描述
    OLED屏能按要求闪烁,说明SPI总线发送功能正常

  3. PWM呼吸灯效果
    在这里插入图片描述

7.RTC时间效果
在这里插入图片描述

总结

总结如下:

功能 适配结果 备注
GPIO输入 匹配
GPIO输出 匹配
串口发送 匹配
串口接收 匹配
SPI发送 匹配
PWM输出 匹配
RTC 匹配

接下来几期博客会继续往后测试基础功能,敬请期待!

版权声明:本文为CSDN博主「ASWaterbenben」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ASWaterbenben/article/details/121587854

生成海报
点赞 0

ASWaterbenben

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

GD32利用CubeMX构建代码的测试

前言 近期搞到一块GD32F103c8t6的开发板,号称是和STM32F103C8T6 Pin To Pin兼容的,查了一些资料,很多老哥也搞过类似的测试,多半结果是不兼容&#xff0c

GD32的Keil环境搭建简述

以GD32F30x为例 从GD官网下载开发文件: GD32F30x_AddOn_V2.1.0.rar包含Keil所需的gd32相关芯片的pack: GD32F30x_Demo_Suites_V2.3.0.rar包

GD32精确延时和时间戳

目前网上很多都是利用systick频繁产生中断进行计数,然后实现延时。我写的这写接口,systick产生中断的频率很低,cpu效率很高。而且同时实现了毫秒延时,微秒延时,以及

GD32F103基础教程—外部中断实验(八)

一、教程简介 本章主要是讲解GPIO输入实验,通过按键触发外部中断,控制LED2闪烁。 二、实验流程 1、工程配置 外部中断触发实验工程配置方法与第五章的配置方法一致,具体请查看第五章教程&#xff0c