STM32
先上废话
简介=--=
STM32是一系列由意法半导体(STMicroelectronics)推出的32位微控制器。STM32微控制器系列采用了ARM Cortex-M内核,这种内核提供了高性能、低功耗、高代码密度和易于开发的特点。因此,STM32微控制器广泛应用于嵌入式系统、智能家居、工业控制、汽车电子、医疗设备等领域。 STM32系列微控制器具有多种不同的系列和型号,这些型号具有不同的内存大小、外设和性能特点。此外,STM32还提供了丰富的开发工具和软件库,包括ST-Link调试器、CubeMX配置工具和HAL库等,这些工具和库可以使开发人员更快、更简便地开发STM32应用程序。
开发工具
- keil5Keil uVision5是一种集成开发环境(IDE),用于嵌入式系统的开发。它支持多种编程语言和微控制器,并提供了强大的调试功能,使得开发人员可以在同一个环境中完成开发,提高了开发效率和可靠性。
- STM32CubeMX是一个可视化配置工具,帮助STM32微控制器的开发人员更快、更简单地创建和配置项目。它可以自动生成初始化代码,并将其与用户的IDE集成,从而简化了代码编写过程。同时,它也集成了HAL库,使用户能够轻松地访问STM32微控制器的各种外设。使用STM32CubeMX可以提高开发效率和可靠性。
- st-linkST-Link驱动是ST公司的开发工具,用于与STM32微控制器进行调试和编程,支持JTAG、SWD等多种调试接口,是STM32开发过程中必不可少的工具。通过官网提供的资源,开发人员可以更好地了解ST-Link的功能和使用方法,从而提高开发效率和开发质量。
keil5的安装过程我就不复述,配置也不需要灰常简单
STM32CubeMX的安装过程也并不是很复杂,有什么问题可以在评论区留言
详细截图与解说
我们安装好软件后会出现这个界面,点击ACCESS TO MCU SELECTOR我们会进入下一个界面,
在画圈圈的位置输入stm32芯片的型号,我用的芯片是STM32F101C8T6,在画圈圈的位置点击一下
会进入下一步
此处就是图文配置界面
项目名称和选择ide
我们点击打开项目,就是中间的那个
我们来到了这个界面
我使用的开发板
猿学社
“上官二号”开发板
|
代码(跑马灯的小程序)
由于开发板的不同,定义的引脚不同,故代码并不通用
思维方式相同,不要盲目抄袭喔
#include "main.h"
#include "gpio.h"
void SystemClock_Config(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1) //这个里面是跑马灯的主要实现
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9,GPIO_PIN_SET);
HAL_Delay(1000);//自带的库
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9,GPIO_PIN_RESET);
HAL_Delay(1000);
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
}
#endif
由于无法上传视频,所以,他成功了,只是你们看不到 今天32的分享就到这里了