零基础STM32开发第一篇点亮led灯

零基础STM32开发第一篇点亮led灯

  • 前言
  • 展示
    • 电路原理图设计
      • 电源部分
      • MCU部分
      • 按键LED部分
      • 蜂鸣器继电器外设
      • 排针
    • PCB设计
    • 实体图
  • 所需软件
  • 点亮led灯测试开始
  • 效果演示
  • 点灯学会了可以干什么

前言

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

展示

电路原理图设计

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

电源部分

零基础STM32开发第一篇点亮led灯_第1张图片

MCU部分

零基础STM32开发第一篇点亮led灯_第2张图片

按键LED部分

零基础STM32开发第一篇点亮led灯_第3张图片

蜂鸣器继电器外设

零基础STM32开发第一篇点亮led灯_第4张图片

排针

零基础STM32开发第一篇点亮led灯_第5张图片

PCB设计

零基础STM32开发第一篇点亮led灯_第6张图片
比较简单的两层板,我还自制了一个6层板树莓派,后期可能会出做板子的教程。

实体图

零基础STM32开发第一篇点亮led灯_第7张图片

所需软件

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

点亮led灯测试开始

零基础STM32开发第一篇点亮led灯_第8张图片
零基础STM32开发第一篇点亮led灯_第9张图片
写的是寄存器版本+库函数版本

查看数据手册得知寄存器
BSRR高16位低电平
低16位高电平
零基础STM32开发第一篇点亮led灯_第10张图片
配置时钟源选择外部时钟
零基础STM32开发第一篇点亮led灯_第11张图片
配置时钟树,配置成最大值最佳配置零基础STM32开发第一篇点亮led灯_第12张图片
打开STLINK调试,防止下载程序完程序死锁,后面会说怎么解决死锁

零基础STM32开发第一篇点亮led灯_第13张图片

 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库函数版本
零基础STM32开发第一篇点亮led灯_第14张图片

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我打开调试功能了,所以没出现锁死函数。可以做一下对比,注释掉锁死函数就可,在下面文件里。
零基础STM32开发第一篇点亮led灯_第15张图片

效果演示

零基础STM32开发第一篇点亮led灯_第16张图片

点灯学会了可以干什么

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

你可能感兴趣的:(STM32,stm32,单片机,arm)