WeDesign4:基于STM32G031最小系统模块的扩展板设计
本文使用STM32G031最小系统模块,设计了一块扩展板。扩展板具有GPIO、ADC、SPI屏幕等接口,可通过扩展板学习STM32G031单片机的使用与编程。
标签
KiCad
嵌入式系统
ADC
STM32G031
WeDesign活动
WeDesign第4期
chinaking
更新2023-09-11
338

基于STM32G031最小系统模块的扩展板设计

  • 概述

      本文使用STM32G031最小系统模块,设计了一块扩展板。扩展板具有GPIO、ADC、SPI屏幕等接口,可通过扩展板学习STM32G031单片机的使用与编程。

      扩展板的原理框图如下图所示

FhepSJ5QRzpDCunzkd5GhzY3hVe7

        扩展板引出了ADC0和ADC1两路模拟量输入信号,可外接双轴手柄;开发板引出了8路GPIO信号,可接LED输出模块,也可接测试按键;此外,还引出了SPI接口,并引出屏幕所需的电源及控制引脚,可直接连接一块SPI彩色显示屏。因时间关系,主要测试完成了ADC和GPIO功能。

        下图是扩展板的实物图。

FrltyfV_ZYVSzBVKPup3VKdpsQtc

  • 硬件设计

扩展板使用的核心是STM32G031最小系统模块,通过排针引出了GPIO、ADC、SPI等接口,便于拆装与组合测试。

下图为使用Kicad设计的电路原理图

FqQKoBYmpOZBieKXYehnqgREohds

PCB打板

Frx9vs92qG9K5v_S0XM7YuX8V68e

电路板设计问题,因本人在出差,这次考虑最简单快捷满足要求,使用了电子积木的方法。

只是设计了一个微型的“面板板”,板上只有排母,可以方便的插接和替换几种模块。

kicad进行设计时,扩展板ADC的引脚和屏幕的引脚有复用情况,这样扩展板ADC和屏幕不能同时使用。应该ADC和左边的GPIO复用部分引脚更加合理。

  • 搜集素材的过程

     这次重点还是软件调试这一部分。主要是STM32CubeIDE及STM32CubeProgrammer如何使用,STM32G031如何编程使用HAL库。

网上相关资料比较丰富,重点参考了CSDN网站资料。

STM32G031-使用STM32CubeIDE实现DMA处理ADC   ,

https://blog.csdn.net/qq_43715171/article/details/113754776

STM32Cube生成hex,bin文件

https://blog.csdn.net/dnct55/article/details/130050708

 

  • 软件调试

软件使用ST公司的开发环境STM32CubeIDE 1.13.1进行编程,下载时使用STM32CubeProgrammer通过usb连接核心板的uart口进行下载。

调试时,需要按住boot,然后USB插入电脑,即可识别UART;

或者插入电脑USB后,按住boot,然后点击一下reset,再同时松开按钮也可。

本次实现的功能

功能1:跑马灯

通过扩展板左侧的GPIO排母,连接一个多路LED指示灯模块,实现指示灯闪烁功能。

FlSU-jmeOtGo1eZkEctM1zTh0XUTFobhK9Noh_agIUvFRGjtK_tsoJF3

 

功能2:ADC手柄测试

通过手柄上下左右四个方向,控制四个指示灯点亮。

FsNEAJ0jd-fweANNQ2hKyGRQjmBHFr6YQuq1TQs2KqqsDiO2yAWBAxtH

Fj2DJv69nfyYZ44oTOV9XmSDKjbyFj2DJv69nfyYZ44oTOV9XmSDKjby

  • 关键代码及说明

指示灯闪烁例程中,在main函数中添加以下代码。

首先初始化GPIO端口,SET为端口置1;Reset为端口置0.

然后在while循环中,通过延时定时控制引脚翻转。

  HAL_GPIO_WritePin(GPIOB, DIO0_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOB, DIO1_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(GPIOA, DIO2_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOC, DIO3_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(GPIOA, DIO4_Pin, GPIO_PIN_SET);
  while (1)
  {
    /* USER CODE END WHILE */
	  HAL_GPIO_TogglePin(GPIOB, DIO0_Pin);
	  HAL_GPIO_TogglePin(GPIOB, DIO1_Pin);
	  HAL_GPIO_TogglePin(GPIOA, DIO2_Pin);
	  HAL_GPIO_TogglePin(GPIOC, DIO3_Pin);
	  HAL_GPIO_TogglePin(GPIOA, DIO4_Pin);
	  HAL_Delay(500);
    /* USER CODE BEGIN 3 */
  }
  • 在ADC转换的例程中

重点是使用STM32CubeIDE对引脚进行配置

Fgiq6-rK3xqapW-6HUnpp7CI8Eby

配置完引脚,软件会自动生成关键代码。详细ADC配置过程见上文提到的ADC参考链接。

在此基础上,再增加下面的代码。根据两路ADC的采样值,控制GPIO输出。

 	if (ad0<1000)     //x轴 左       //最大值4095
	 	  	{
	 	  	HAL_GPIO_WritePin(GPIOB, DIO0_Pin,GPIO_PIN_SET);
	 	  	HAL_GPIO_WritePin(GPIOB, DIO1_Pin,GPIO_PIN_RESET);
	 	  	}
	 	  	else if (ad0>3000)  //x轴 右
	 	  	{
	 	  	HAL_GPIO_WritePin(GPIOB, DIO0_Pin,GPIO_PIN_RESET);
	 	  	HAL_GPIO_WritePin(GPIOB, DIO1_Pin,GPIO_PIN_SET);
	 	    }
	 	  	else
	 		{
	 		 HAL_GPIO_WritePin(GPIOB, DIO0_Pin,GPIO_PIN_RESET);
	 		 HAL_GPIO_WritePin(GPIOB, DIO1_Pin,GPIO_PIN_RESET);
	 		}

	 	  	if (ad1<1000)    // y轴 上        最大值4095
	 		{
	 		HAL_GPIO_WritePin(GPIOA, DIO2_Pin,GPIO_PIN_SET);
	 		HAL_GPIO_WritePin(GPIOC, DIO3_Pin,GPIO_PIN_RESET);
	 		}
	 		else if (ad1>3000) //y轴 下
	 		{
	 		HAL_GPIO_WritePin(GPIOA, DIO2_Pin,GPIO_PIN_RESET);
	 		HAL_GPIO_WritePin(GPIOC, DIO3_Pin,GPIO_PIN_SET);
	 		}
	 		else
	 		{
	 		 HAL_GPIO_WritePin(GPIOA, DIO2_Pin,GPIO_PIN_RESET);
	 		 HAL_GPIO_WritePin(GPIOC, DIO3_Pin,GPIO_PIN_RESET);
	 		}

 

  • STM32G031核心模块的优势与局限

STM32G031优势是体积小巧,接口资源丰富,便于携带,方便连接电子积木,随时学习。

可通过USB的Uart编程,编程也比较方便,不使用ST-LINK下载器就可以下载程序。

当然,USB下载也有局限,不便于在线调试,下载时需要切换编程软件和下载软件两个软件,操作比较麻烦。

附件下载
STM32G031扩展板设计2 -kicad.rar
Kicad工程
STM32G031G8U6_ADC.rar
ADC代码
STM32G031G8U6_Test1.rar
指示灯代码
团队介绍
老胡,自动化工程师
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号