前言

本人自制了一款stm32核心板,正好要做测试各个功能是否正常使用,借此机会出个教程,供小白从零开始学习,后面会在芯片里面移植freertos系统内核以及鸿蒙系统内核等做测试。单片机入门必点灯 !!!

展示

电路原理图设计

用了模块分立思想做的原理图,高内聚低耦合

电源部分

在这里插入图片描述

MCU部分

在这里插入图片描述

按键LED部分

在这里插入图片描述

蜂鸣器继电器外设

在这里插入图片描述

排针

在这里插入图片描述

PCB设计

在这里插入图片描述
比较简单的两层板,我还自制了一个6层板树莓派,后期可能会出做板子的教程。

实体图

在这里插入图片描述

所需软件

1.KEIL5 ARM版,别下成51的,官网下就行
2.CUBEMAX:STM32初始化代码生成工具,对小白比较友善,也可以下里面用寄存器。比较方便

点亮led灯测试开始

在这里插入图片描述
在这里插入图片描述
写的是寄存器版本+库函数版本

查看数据手册得知寄存器
BSRR高16位低电平
低16位高电平
在这里插入图片描述
配置时钟源选择外部时钟
在这里插入图片描述
配置时钟树,配置成最大值最佳配置在这里插入图片描述
打开STLINK调试,防止下载程序完程序死锁,后面会说怎么解决死锁

在这里插入图片描述

 while (1)
  {
		GPIOB->BSRR=(1<<12)|(1<<13)|(1<<14)|(1<<15);//置位输出高电平,灯熄灭
		GPIOF->BSRR=(1<<28);//复位灯1点亮
		HAL_Delay(1000);
		GPIOF->BSRR=(1<<12)|(1<<13)|(1<<14)|(1<<15);//置位输出高电平,灯熄灭
		HAL_Delay(1000);
		GPIOF->BSRR=(1<<29);//复位灯2点亮
		HAL_Delay(1000);
		GPIOF->BSRR=(1<<12)|(1<<13)|(1<<14)|(1<<15);//置位输出高电平,灯熄灭
		HAL_Delay(1000);
		GPIOF->BSRR=(1<<30);//复位灯3点亮
		HAL_Delay(1000);
		GPIOF->BSRR=(1<<12)|(1<<13)|(1<<14)|(1<<15);//置位输出高电平,灯熄灭
		HAL_Delay(1000);
		GPIOF->BSRR=(1<<31);//复位灯4点亮
		HAL_Delay(1000);
		
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  

HAL库函数版本
在这里插入图片描述

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* 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_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15,GPIO_PIN_RESET);
	//printf("light on\n");
	HAL_Delay(200);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14,GPIO_PIN_RESET);
	HAL_Delay(200);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13,GPIO_PIN_RESET);
	HAL_Delay(200);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12,GPIO_PIN_RESET);
	HAL_Delay(200);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15,GPIO_PIN_RESET);
	//printf("light on\n");
	HAL_Delay(200);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15,GPIO_PIN_SET);
	HAL_Delay(200);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14,GPIO_PIN_RESET);
	HAL_Delay(200);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14,GPIO_PIN_SET);
	HAL_Delay(200);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13,GPIO_PIN_RESET);
	HAL_Delay(200);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13,GPIO_PIN_SET);
	HAL_Delay(200);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12,GPIO_PIN_RESET);
	HAL_Delay(200);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12,GPIO_PIN_SET);
	HAL_Delay(200);
		
		
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

注意:不打开调试功能里面会出现个下载一次程序就禁止下载的函数,需要boot0复位清除flash我打开调试功能了,所以没出现锁死函数。可以做一下对比,注释掉锁死函数就可,在下面文件里。
在这里插入图片描述

效果演示

在这里插入图片描述

点灯学会了可以干什么

控制继电器,蜂鸣器,电闸,水泵,电机,开关,灯泡,洗衣机,电风扇。。。非常多,设备控制的基础

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐