基于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对象执…...
零基础玩转BEYOND REALITY Z-Image:手把手教你搭建高精度文生图引擎
零基础玩转BEYOND REALITY Z-Image:手把手教你搭建高精度文生图引擎 1. 引言:为什么选择BEYOND REALITY Z-Image 在当今AI图像生成领域,BEYOND REALITY Z-Image以其卓越的写实表现力脱颖而出。这款基于Z-Image-Turbo底座和BEYOND REALITY S…...
Python 性能优化避坑指南:回归风险防控、基准压测与安全回滚实战
Python 性能优化避坑指南:回归风险防控、基准压测与安全回滚实战 📌 性能优化,为什么总让人又爱又怕? Python 从 1991 年 Guido van Rossum 创造至今,已成长为全球开发者首选“胶水语言”。其简洁优雅的语法、动态类…...
深度学习项目训练环境多场景落地:自动驾驶小车图像识别项目快速启动
深度学习项目训练环境多场景落地:自动驾驶小车图像识别项目快速启动 你是不是也遇到过这样的问题?想跑一个深度学习项目,光是配环境就花了大半天,各种版本冲突、依赖报错,好不容易装好了,一运行又提示缺这…...
Tao-8k辅助学术研究:从研究想法到LateX论文草稿
Tao-8k辅助学术研究:从研究想法到LateX论文草稿 作为一名研究生或科研人员,你是否经常被这样的场景困扰:脑子里有个模糊的研究想法,却不知如何系统化地展开;面对海量文献,梳理综述耗时耗力;实验…...
Stable-Diffusion-V1-5 效率工具集:Ollama本地LLM辅助提示词生成
Stable-Diffusion-V1-5 效率工具集:Ollama本地LLM辅助提示词生成 你是不是也遇到过这种情况:脑子里有个绝妙的画面,但打开Stable Diffusion,面对那个空白的提示词输入框,却不知道从何写起。要么写得太简单,…...
终极Intel PCM部署手册:从源码编译到生产环境配置
终极Intel PCM部署手册:从源码编译到生产环境配置 【免费下载链接】pcm Intel Performance Counter Monitor (Intel PCM) 项目地址: https://gitcode.com/gh_mirrors/pc/pcm Intel Performance Counter Monitor(Intel PCM)是一个强大的…...
原神玩家效率革命:BetterGI开源自动化解决方案全解析
原神玩家效率革命:BetterGI开源自动化解决方案全解析 【免费下载链接】better-genshin-impact 🍨BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动派遣 | 一键强化 - UI Automation Testing Tools For …...
HexView脚本进阶:巧用/CR参数实现多区域数据‘挖空’,为自动化测试铺路
HexView脚本进阶:巧用/CR参数实现多区域数据‘挖空’,为自动化测试铺路 在自动化测试领域,二进制文件的预处理往往决定了测试的深度和效率。想象一下这样的场景:你手头有一份完整的ECU固件文件,但为了验证设备在数据损…...
UG/NX Block UI Styler字符串控件避坑指南:常见问题与解决方案
UG/NX Block UI Styler字符串控件避坑指南:常见问题与解决方案 在UG/NX二次开发中,Block UI Styler作为可视化对话框设计工具,其字符串控件(String Control)是使用频率最高的交互元素之一。无论是参数输入、状态显示还…...
保姆级教程:用SSC Tool 5.13为先楫HPM6E00EVK生成8轴EtherCAT从站代码(附XML配置避坑点)
先楫HPM6E00EVK实现8轴EtherCAT从站开发实战指南 在工业自动化领域,多轴协同控制的需求日益增长。对于嵌入式开发者而言,如何快速搭建一个稳定可靠的EtherCAT从站系统成为关键挑战。本文将基于先楫HPM6E00EVK开发板,详细解析从代码生成到实际…...
