当前位置: 首页 > news >正文

基于STM32C8T6的CubeMX:HAL库点亮LED

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

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

STMCuBeMX新建项目的两种匪夷所思的问题icon-default.png?t=O83Ahttps://mp.csdn.net/mp_blog/creation/editor/142151511

STMCubeMX文件下载后会出现其他项目无法下载的问题icon-default.png?t=O83Ahttps://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 进行网页设计的经典案例&#xff0…...

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 效果&#xff1a; 1. 二维码生成&#xff1a; 下载二维码图片&#xff1a; 二维码的内容&#xff1a; 实现代码&#xff1a; <template>…...

GEE 教程:利用Google Dynamic数据进行逐月指定区域的土地分类数据提取分析

目录 简介 数据 代码 结果 简介 利用Google Dynamic数据进行逐月指定区域的土地分类数据提取分析 数据 Google Dynamic数据是指由Google自动生成、自动更新的数据,它不需要人工干预,而是通过算法和机器学习技术从各种来源获取并解析数据。这些数据可以是来自互联网上的…...

Nginx 负载均衡:优化网站性能与可扩展性的利器

在当今高流量的互联网时代&#xff0c;网站的性能和可扩展性成为了衡量其成功与否的关键因素之一。随着用户量的不断增加&#xff0c;单一服务器往往难以承受巨大的访问压力&#xff0c;这时就需要引入负载均衡技术来分散请求&#xff0c;提高系统的整体性能和可靠性。Nginx&am…...

【Python基础】Python错误和异常处理(详细实例)

本文收录于 《Python编程入门》专栏&#xff0c;从零基础开始&#xff0c;分享一些Python编程基础知识&#xff0c;欢迎关注&#xff0c;谢谢&#xff01; 文章目录 一、前言二、Python中的错误类型三、Python异常处理机制3.1 try-except语句3.2 try-except-else语句3.3 try-fi…...

如何查看串口被哪个程序占用?截止目前最方便的方法

痛点&#xff1a;串口因为某种原因被占用&#xff0c;如何找到罪魁祸首&#xff1f; 做开发的小伙伴们&#xff0c;经常会遇到这样的问题&#xff1a;串口因为某种原因被占用&#xff0c;导致无法通讯&#xff0c;但是又找不到被哪个程序占用。只有重启电脑&#xff0c;才能解…...

深入理解SpringBoot(一)----SpringBoot的启动流程分析

1、SpringApplication 对象实例化 SpringApplication 文件 public static ConfigurableApplicationContext run(Object[] sources, String[] args) {// 传递的source其实就是类Bootstrapreturn new SpringApplication(sources).run(args);// 实例化一个SpringApplication对象执…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...