前言
近期搞到一块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++;
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);
测试
测试结果:
- 按键测试
按下按键,A寄存器自加,B寄存器无动作
松开按键,B寄存器自加,A寄存器无动作
按键(GPIO输入测试成功,输入点可完美匹配)
- LED测试
按键按下,LED亮
按键松开,LED熄灭
经测试,GPIO输出点完全适配;
- 串口发送测试
每500ms发送一次ASWaterbenben
频率基本一致,串口发送可适配
-
串口接收测试
从PC发送不愧是我后面带回车符号,串口能正常返回,说明串口接收正常! -
OLED的显示效果如下:
OLED屏能按要求闪烁,说明SPI总线发送功能正常 -
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兼容的,查了一些资料,很多老哥也搞过类似的测试,多半结果是不兼容,具体哪里不兼容,哪些共功能不兼容,老哥们基本不说,所以我来把基础的功能测试一下,看哪些兼容哪些不兼容;
目标
本次测试功能:
- 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++;
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);
测试
测试结果:
- 按键测试
按下按键,A寄存器自加,B寄存器无动作
松开按键,B寄存器自加,A寄存器无动作
按键(GPIO输入测试成功,输入点可完美匹配)
- LED测试
按键按下,LED亮
按键松开,LED熄灭
经测试,GPIO输出点完全适配;
- 串口发送测试
每500ms发送一次ASWaterbenben
频率基本一致,串口发送可适配
-
串口接收测试
从PC发送不愧是我后面带回车符号,串口能正常返回,说明串口接收正常! -
OLED的显示效果如下:
OLED屏能按要求闪烁,说明SPI总线发送功能正常 -
PWM呼吸灯效果
7.RTC时间效果
总结
总结如下:
功能 | 适配结果 | 备注 |
---|---|---|
GPIO输入 | 匹配 | |
GPIO输出 | 匹配 | |
串口发送 | 匹配 | |
串口接收 | 匹配 | |
SPI发送 | 匹配 | |
PWM输出 | 匹配 | |
RTC | 匹配 |
接下来几期博客会继续往后测试基础功能,敬请期待!
版权声明:本文为CSDN博主「ASWaterbenben」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ASWaterbenben/article/details/121587854
暂无评论