零基础STM32开发第一篇点亮led灯
零基础STM32开发第一篇点亮led灯前言展示电路原理图设计电源部分MCU部分按键LED部分蜂鸣器继电器外设排针PCB设计实体图所需软件点亮led灯测试开始效果演示点灯学会了可以干什么前言本人自制了一款stm32核心板,正好要做测试各个功能是否正常使用,借此机会出个教程,供小白从零开始学习,后面会在芯片里面移植freertos系统内核以及鸿蒙系统内核等做测试。单片机入门必点灯 !!!展示电路原理图
·
零基础STM32开发第一篇点亮led灯
前言
本人自制了一款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我打开调试功能了,所以没出现锁死函数。可以做一下对比,注释掉锁死函数就可,在下面文件里。
效果演示

点灯学会了可以干什么
控制继电器,蜂鸣器,电闸,水泵,电机,开关,灯泡,洗衣机,电风扇。。。非常多,设备控制的基础
更多推荐
所有评论(0)