基于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对象执…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...