基于STM32C8T6的CubeMX:HAL库点亮LED

三个可能的问题和解决方法:

大家完成之后回来看,每一种改错误都是一种成长,不要畏惧,要快乐,积极面对,要耐心对待

STMCuBeMX新建项目的两种匪夷所思的问题https://mp.csdn.net/mp_blog/creation/editor/142151511

STMCubeMX文件下载后会出现其他项目无法下载的问题https://mp.csdn.net/mp_blog/creation/editor/142152180

一、准备工作

1、配置好的STMCubeMX环境

2、stm32C8T6开发版一块,LED灯若干

3、下载器一个

二、操作步骤

1、新建项目

2、等待过程

3、选择芯片和MCU,开始一个新项目

4、配置管脚

可以看见,当右键选择某个管脚时,会出现这个管脚所拥有的功能。我们点灯就直接把需要的端口配备成 GPIO_Output 就可以

我选择了PA0、PA2、PA4三个端口,大家可以根据喜好选择端口

5、配备时钟

6、其他配置

7、点击生成keil文件

8、keil文件相关操作

在箭头所指处加入以下代码

cpp 复制代码
     HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);  //此处根据自己在CubeMx中设置的端口
	HAL_Delay(500);
	HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);	
	HAL_Delay(500);
	HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_4);
	HAL_Delay(500);

9、软件配置

②、选择自己的下载模式

③勾选箭头指向处

10、最后点击运行,并下载的单片机中,就可以实现闪烁功能了

三、main.c函数带注释

cpp 复制代码
/* USER CODE BEGIN Header */
2/**
3  ******************************************************************************
4  * @file           : main.c
5  * @brief          : 主程序体
6  ******************************************************************************
7  * @attention
8  *
9  * 版权 (c) 2024 STMicroelectronics.
10  * 所有权利保留。
11  *
12  * 此软件按可以在该软件组件根目录中的LICENSE文件中找到的条款进行许可。
13  * 如果没有随此软件一起提供LICENSE文件,则按原样提供。
14  *
15  ******************************************************************************
16  */
17/* USER CODE END Header */
18/* Includes ------------------------------------------------------------------*/
19#include "main.h"  // 包含主头文件
20
21/* Private includes ----------------------------------------------------------*/
22/* USER CODE BEGIN Includes */
23
24/* USER CODE END Includes */
25
26/* Private typedef -----------------------------------------------------------*/
27/* USER CODE BEGIN PTD */
28
29/* USER CODE END PTD */
30
31/* Private define ------------------------------------------------------------*/
32/* USER CODE BEGIN PD */
33/* USER CODE END PD */
34
35/* Private macro -------------------------------------------------------------*/
36/* USER CODE BEGIN PM */
37
38/* USER CODE END PM */
39
40/* Private variables ---------------------------------------------------------*/
41
42/* USER CODE BEGIN PV */
43
44/* USER CODE END PV */
45
46/* Private function prototypes -----------------------------------------------*/
47void SystemClock_Config(void);  // 系统时钟配置函数声明
48static void MX_GPIO_Init(void);  // GPIO初始化函数声明
49/* USER CODE BEGIN PFP */
50
51/* USER CODE END PFP */
52
53/* Private user code ---------------------------------------------------------*/
54/* USER CODE BEGIN 0 */
55
56/* USER CODE END 0 */
57
58/**
59  * @brief  应用程序入口点
60  * @retval int
61  */
62int main(void)
63{
64  /* USER CODE BEGIN 1 */
65  // 用户自定义代码开始
66  /* USER CODE END 1 */
67
68  /* MCU Configuration--------------------------------------------------------*/
69  /* 重置所有外设,初始化闪存接口和系统滴答定时器 */
70  HAL_Init();
71
72  /* USER CODE BEGIN Init */
73  // 用户自定义初始化代码
74  /* USER CODE END Init */
75
76  /* Configure the system clock */
77  SystemClock_Config();  // 配置系统时钟
78
79  /* USER CODE BEGIN SysInit */
80  // 用户自定义系统初始化代码
81  /* USER CODE END SysInit */
82
83  /* Initialize all configured peripherals */
84  MX_GPIO_Init();  // 初始化所有配置好的GPIO
85  /* USER CODE BEGIN 2 */
86  // 用户自定义代码开始
87  /* USER CODE END 2 */
88
89  /* Infinite loop */
90  /* USER CODE BEGIN WHILE */
91  while (1)
92  {
93    /* USER CODE END WHILE */
94
95    /* USER CODE BEGIN 3 */
96    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);  // 切换PA0引脚的状态
97    HAL_Delay(500);  // 延时500毫秒
98    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);  // 切换PA2引脚的状态
99    HAL_Delay(500);  // 再次延时500毫秒
100    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_4);  // 切换PA4引脚的状态
101    HAL_Delay(500);  // 最后延时500毫秒
102  }
103  /* USER CODE END 3 */
104}
105
106/**
107  * @brief System Clock Configuration
108  * @retval None
109  */
110void SystemClock_Config(void)
111{
112  RCC_OscInitTypeDef RCC_OscInitStruct = {0};  // RCC振荡器初始化结构体
113  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};  // RCC时钟初始化结构体
114
115  /** 初始化RCC振荡器根据RCC_OscInitTypeDef结构体指定的参数
116  */
117  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;  // 选择HSI振荡器类型
118  RCC_OscInitStruct.HSIState = RCC_HSI_ON;  // HSI振荡器开启
119  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;  // 设置默认的HSI校准值
120  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;  // PLL关闭
121  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)  // 配置RCC振荡器
122  {
123    Error_Handler();  // 如果配置失败则调用错误处理函数
124  }
125  /** 初始化CPU, AHB和APB总线时钟
126  */
127  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;  // 指定要配置的时钟类型
128  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;  // 系统时钟源为HSI
129  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;  // AHB时钟除数为1
130  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;  // APB1时钟除数为1
131  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;  // APB2时钟除数为1
132
133  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)  // 配置RCC时钟
134  {
135    Error_Handler();  // 如果配置失败则调用错误处理函数
136  }
137  HAL_RCC_MCOConfig(RCC_MCO, RCC_MCO1SOURCE_SYSCLK, RCC_MCODIV_1);  // 配置MCO1输出为系统时钟
138}
139
140/**
141  * @brief GPIO Initialization Function
142  * @param None
143  * @retval None
144  */
145static void MX_GPIO_Init(void)
146{
147  GPIO_InitTypeDef GPIO_InitStruct = {0};  // GPIO初始化结构体
148
149  /* GPIO Ports Clock Enable */
150  __HAL_RCC_GPIOD_CLK_ENABLE();  // 使能GPIOD时钟
151  __HAL_RCC_GPIOA_CLK_ENABLE();  // 使能GPIOA时钟
152
153  /*Configure GPIO pin Output Level */
154  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_4, GPIO_PIN_RESET);  // 设置GPIOA的PA0、PA2、PA4为低电平
155
156  /*Configure GPIO pins : PA0 PA2 PA4 */
157  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_4;  // 配置引脚
158  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  // 输出推挽模式
159  GPIO_InitStruct.Pull = GPIO_NOPULL;  // 不使用内部上拉或下拉电阻
160  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  // 低速模式
161  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);  // 初始化GPIOA
162
163  /*Configure GPIO pin : PA8 */
164  GPIO_InitStruct.Pin = GPIO_PIN_8;  // 配置引脚
165  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;  // 复用推挽输出模式
166  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  // 低速模式
167  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);  // 初始化GPIOA
168}
169
170/* USER CODE BEGIN 4 */
171
172/* USER CODE END 4 */
173
174/**
175  * @brief  此函数在发生错误时执行。
176  * @retval None
177  */
178void Error_Handler(void)
179{
180  /* USER CODE BEGIN Error_Handler_Debug */
181  // 用户可以添加自己的实现来报告HAL错误返回状态
182  __disable_irq();  // 关闭中断
183  while (1)  // 进入无限循环
184  {
185  }
186  /* USER CODE END Error_Handler_Debug */
187}
188
189#ifdef  USE_FULL_ASSERT
190/**
191  * @brief  报告发生assert_param错误的源文件名和源行号。
192  * @param  file: 指向源文件名的指针
193  * @param  line: assert_param错误行源号
194  * @retval None
195  */
196void assert_failed(uint8_t *file, uint32_t line)
197{
198  /* USER CODE BEGIN 6 */
199  // 用户可以添加自己的实现来报告文件名和行号
200  /* USER CODE END 6 */
201}
202#endif /* USE_FULL_ASSERT */
相关推荐
嵌入式大圣1 小时前
STM32 单片机最小系统全解析
stm32·单片机·嵌入式硬件
LN花开富贵6 小时前
stm32g431rbt6芯片中VREF+是什么?在电路中怎么设计?
笔记·stm32·单片机·嵌入式硬件·学习
qq21084629536 小时前
【stm32笔记】使用rtt-studio与stm32CubeMx联合创建项目
笔记·stm32·嵌入式硬件
CV金科6 小时前
蓝桥杯—STM32G431RBT6按键的多方式使用(包含软件消抖方法精讲)从原理层面到实际应用(一)
stm32·单片机·嵌入式硬件·蓝桥杯
2021.096 小时前
五、CAN总线
嵌入式硬件
luckyluckypolar6 小时前
STM32——输入捕获
stm32·单片机·嵌入式硬件·物联网
hong1616886 小时前
嵌入式硬件基础知识
嵌入式硬件
hai405876 小时前
单片机(Microcontroller)原理及应用
单片机·嵌入式硬件
jun7788957 小时前
嵌入式硬件基础知识
嵌入式硬件
Projectsauron8 小时前
STM32 芯片启动过程
stm32·单片机·芯片启动过程