基于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文件相关操作
在箭头所指处加入以下代码
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函数带注释
/* 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 */
相关文章:
基于STM32C8T6的CubeMX:HAL库点亮LED
三个可能的问题和解决方法: 大家完成之后回来看,每一种改错误都是一种成长,不要畏惧,要快乐,积极面对,要耐心对待 STMCuBeMX新建项目的两种匪夷所思的问题https://mp.csdn.net/mp_blog/creation/editor/1…...
职业院校数据科学与大数据技术专业人工智能实训室建设方案
一、引言 随着人工智能(AI)技术的迅猛发展,其在全球范围内的应用日益广泛,从智能交通、环境保护到公共安全、智能家居等多个领域均展现出巨大的潜力。然而,我国在人工智能领域的人才储备仍显不足,这已成为…...
JavaScript网页设计案例分析
JavaScript网页设计案例分析 随着互联网技术的发展,JavaScript 已经成为现代网页设计中不可或缺的一部分。从简单的页面交互到复杂的应用程序开发,JavaScript 都发挥着至关重要的作用。本文将探讨几个运用 JavaScript 进行网页设计的经典案例࿰…...
2024.9.15周报
一、题目信息 题目:Physics-informed neural networks for solving flow problems modeled by the 2D Shallow Water Equations without labeled data 链接:物理信息神经网络用于解决由二维浅水方程建模的流动问题,无需标记数据- ScienceDi…...
QT模型视图结构1
文章目录 Qt 模型视图结构概述(一)1、模型/视图结构基本原理2、模型3、视图4、代理5、简单实例 Qt 模型视图结构概述(一) 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据,视图组件显示模型中的数据,在视图组件里修改的数据会…...
Ubuntu20+Noetic+cartographer_ros编译部署
1 准备工作 (1)准备Ubuntu20系统。 (2)安装ROS系统,参考 https://blog.csdn.net/weixin_46123033/article/details/139527141(3)Cartographer相关软件包和源码下载: https://gitee.com/mrwan…...
linux-L3-linux 复制文件
linux 中要将文件file1.txt复制到目录dir中,可以使用以下命令 cp file1.txt dir/复制文件 cp /path/to/source/file /path/to/destination移动 mv /path/to/source/file /path/to/destination复制文件夹内的文件 cp -a /path/to/source/file /path/to/destinati…...
Kotlin:1.9.0 的新特性
一、概述 Kotlin 1.9.0版本英语官方文档 Kotlin 1.9.0 中文官方文档 The Kotlin 1.9.0 release is out and the K2 compiler for the JVM is now in Beta. Additionally, here are some of the main highlights: Kotlin 1.9.0版本已经发布,用于JVM的K2编译器现在…...
golang实现从服务器下载文件到本地指定目录
一、连接服务器,采用sftp连接模式 package middlewaresimport ("fmt""time""github.com/pkg/sftp""golang.org/x/crypto/ssh" )// 建立服务器连接 func Connect(user, password, host string, port int) (*sftp.Client, e…...
C++数据结构-树的概念及分类介绍(基础篇)
1.什么是树 树是数据结构中的一种,其属于非线性数据结构结构的一种,我们前文所提到的数据结构多数都是线性的,这也是较为简单的数据结构,而接下来的树与图均属于非线性数据结构,也是概念极多的一类。 树是由结点或顶…...
职场 Death Note
场景一 测试:哎,怎么会这样呢?时间没到,他怎么就变成这个样子了呢?一副大惊小怪,整个办公室都是他的声音 开发:对对对,我代码问题,别BB了。 你直接说这个地方不对&#…...
Vue3.0组合式API:computed计算属性、watch监听器、watchEffect高级监听器
1、computed() 计算属性 在模板中绑定表达式只能用于简单的运算。如果运算比较复杂,可以使用 Vue.js 提供的计算属性,通过计算属性可以处理比较复杂的逻辑。 1.1 计算属性的应用 通过计算属性可以实现各种复杂的逻辑,包括运算、函数调用等…...
RAII 与 std::lock_guard 在 C++ 中的应用:自动化互斥锁管理与线程安全
目录 1. RAII(资源获取即初始化)概述 RAII 的优点 2. std::lock_guard 的工作原理 2.1 构造函数 2.2 析构函数 2.3 关键特性 3. 为什么 std::lock_guard 能自动管理锁的生命周期 3.1 RAII 原则的应用 3.2 异常安全 3.3 简化代码和减少错误 4.…...
风格汇:奢华风格在UI设计中如何被定义的。
在UI设计中,奢华风格通常指的是一种高端、豪华、精致的设计风格,旨在营造出奢华、豪华的视觉效果,给用户带来高品质、高档次的感受。 奢华风格的UI设计通常会运用一些富丽堂皇的元素和效果,例如金色、银色、贵族紫、华丽的字体、华…...
Vue2 qrcode+html2canvas 实现二维码的生成和保存
1.安装 npm install qrcode npm install html2canvas 2.引用 import QRCode from qrcode import html2canvas from html2canvas 效果: 1. 二维码生成: 下载二维码图片: 二维码的内容: 实现代码: <template>…...
GEE 教程:利用Google Dynamic数据进行逐月指定区域的土地分类数据提取分析
目录 简介 数据 代码 结果 简介 利用Google Dynamic数据进行逐月指定区域的土地分类数据提取分析 数据 Google Dynamic数据是指由Google自动生成、自动更新的数据,它不需要人工干预,而是通过算法和机器学习技术从各种来源获取并解析数据。这些数据可以是来自互联网上的…...
Nginx 负载均衡:优化网站性能与可扩展性的利器
在当今高流量的互联网时代,网站的性能和可扩展性成为了衡量其成功与否的关键因素之一。随着用户量的不断增加,单一服务器往往难以承受巨大的访问压力,这时就需要引入负载均衡技术来分散请求,提高系统的整体性能和可靠性。Nginx&am…...
【Python基础】Python错误和异常处理(详细实例)
本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢! 文章目录 一、前言二、Python中的错误类型三、Python异常处理机制3.1 try-except语句3.2 try-except-else语句3.3 try-fi…...
如何查看串口被哪个程序占用?截止目前最方便的方法
痛点:串口因为某种原因被占用,如何找到罪魁祸首? 做开发的小伙伴们,经常会遇到这样的问题:串口因为某种原因被占用,导致无法通讯,但是又找不到被哪个程序占用。只有重启电脑,才能解…...
深入理解SpringBoot(一)----SpringBoot的启动流程分析
1、SpringApplication 对象实例化 SpringApplication 文件 public static ConfigurableApplicationContext run(Object[] sources, String[] args) {// 传递的source其实就是类Bootstrapreturn new SpringApplication(sources).run(args);// 实例化一个SpringApplication对象执…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
