STM32-HAL库开发快速入门

注:本文主要记录一下STM32CubeMX软件的使用流程,记录内容以STM32外设(中断、I2C、USART、SPI等配置)在STM32CubeMX中的设置为主,对驱动代码编写不做记录,所以阅读本文最好有标准库开发经验。除第2节外,使用的都是韦东山老师的瑞士军刀系列。

01 软件安装

1.keil

需要安装以下支持包(keil在线安装里没有对应芯片支持包)。

2.STM32CubeMX

安装库:

3.串口助手

02 HAL库点灯操作

2.1 硬件连接

该原理图来源于学益得在线课堂教学项目《RTOS项目实战:从PCB到FreeRTOS|手写MQTT》。

DAPLINK电路连接:

(1)程序下载:

单片机SCK————DAPLINK的SCK

单片机SWK————DAPLINK的SWD

(2)串口连接

单片机TX————DAPLINK的RX

单片机RX————DAPLINK的TX

单片机GND————DAPLINK的GND

单片机3V3————DAPLINK的3V3

单片机ReSet————DAPLINK的RST

2.2 寄存器点灯 

2.2.1 官网下载库文件 

ST公司官网:

STSW-STM32065 - STM32F4 DSP and standard peripherals library - STMicroelectronics

2.2.2 创建工程 

(1)新建工程

(2)复制启动文件到工程 

记得将文件组添加到路径中: 

 此时编译运行会有错误,需要进行以下处理:

(3)配置RCC时钟 

如果我们需要点亮PB10引脚上的LED,让PB10等于1即可: 

与STM32F1系列不同,STM32所有的GPIO都挂载再AHB总线上,所以配置GPIO的RCC时钟时,配置的是AHB的时钟。 

(4)配置PB10引脚为输出模式 

(5)配置PB10引脚为推挽输出

(6)配置PB10引脚为输出高电平 

(7)main.c

#include <stm32f411xe.h>                  // 我们没有把所有启动文件都复制进来,所以用<>
//#include "stm32f4xx.h"                  // Device header

int main()
{
	//使能时钟
	RCC->AHB1ENR = 0X00000002;     //使能挂载在AHB上的PB10时钟
	//配置引脚模式
	GPIOB->MODER = 0x00100000;     //配置PB10为输出模式
	//配置输出模式
	GPIOB->OTYPER = 0x00000000;    //配置PB10引脚为推挽输出模式
	//配置输出的值
	GPIOB->ODR = 0x00000400;       //配置PB10引脚输出高电平
	while(1);	
}

void SystemInit()
{

}

注意:keil代码文件最后一行必须是空行,编译才不会有问题。 下载程序时注意以下几个问题:

(1)注意切换调试工具

(2)使用微库,就是简易版本的C库、使用C语言,开发的时候需要勾选“Use MicroLIB”

2.3 CubeMX创建工程 

寄存器开发:优点:程序执行的效率高;缺点:开发效率低。

库开发:标准库   HAL库(需要借助CubeMX)

新建工程

RCC(时钟源)配置

晶振频率越高,功耗越高,因此提供了两个晶振供选择。

上图这里配置的是外部晶振,我们这个案例不需要用到,因为配不配置都行。

输入100后会自动匹配其它系数 ,由内部晶振分频输出。

2.4 HAL库点灯

使用CuberMX创建完工程后,可用keil打开相应keil工程,修改源码。 

main.c

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2024 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
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();
  /* USER CODE BEGIN 2 */
  __HAL_RCC_GPIOB_CLK_ENABLE();       // 使能GPIOB的时钟.注意:时钟使能一定要在GPIO配置完成前
  GPIO_InitTypeDef GPIO_InitStruct;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //设置gPIOB为推挽输出
  GPIO_InitStruct.Pin = GPIO_PIN_10;          //使用PB10引脚
  GPIO_InitStruct.Pull = GPIO_NOPULL;         //配置GPIO引脚不需要上拉
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; //配置GPIO输出速度为低速
  
  HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);       //使用结构体配置GPIOB 	
  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET);  //将PB10置为高电平
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

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

/**
  * @brief
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值