STM32CubeIDE使用过程记录

最近在做一款机器人的开发,使用到了STM32CubeIDE,这里记录一些使用技巧方便后续查阅。

STM32CubeIDE使用过程记录

  • 快捷键
  • 开启代码自动补全功能
  • 看门狗设置
  • CRC设置
  • IO口取反
  • 定时器设置 及 定时器中断
  • 外部中断
  • GPIO配置
  • STC15单片机GPIO模式配置
  • 片内闪存(Flash)的读写操作

快捷键

界面字体放大:“ctrl” + “shift” + “+”
界面字体缩小:“ctrl” + “-”

注释代码:“ctrl” + “/”
补全代码:“alt” + “/”

右缩进:“tab”
左缩进: “shift” + “tab”

开启代码自动补全功能

首先,打开程序Window菜单下Preferences选项

在这里插入图片描述

在 C/C++ --> Editor --> Content Assist --> Advanced 设置里勾选上下两部分的 Parsing-based Proposals

在这里插入图片描述

然后,我们需要设置相应的快捷键。在 General --> Keys 下面搜索content assist, 设置C/C++ Content Assist (Parsing-based Proposals)的Binding快捷键为你所想设置的,在这里笔者设置成了content Alt+Z,,When 设置成 C/C++ Editor。设置到这里便完成了。

在这里插入图片描述

看门狗设置

看门狗的时钟:

在这里插入图片描述

时间设置:

设定时间=(prescale/看门狗的时钟(KHZ))*reload value

在这里插入图片描述

喂狗:

HAL_IWDG_Refresh(&hiwdg);//喂看门狗

在这里插入图片描述

CRC设置

设置界面:

在这里插入图片描述

uint32_t crcBuf[1];
uint32_t crcValue=0;
uint8_t *crcValueList;crcBuf[0] = (uint32_t)aRxBuffer2[0];
crcValue = HAL_CRC_Calculate(&hcrc, crcBuf, sizeof(crcBuf)/sizeof(crcBuf[0]));  //计算CRC校验
crcValueList = (uint8_t*)&crcValue;

IO口取反

HAL_GPIO_TogglePin(GPIOC, LED_test_Pin);		//toggle the pin

定时器设置 及 定时器中断

定时器分类

  • 基本定时器(TIM6~TIM7)
    功能:作为时基,定时功能。
  • 通用定时器(TIM2~TIM5)
    功能:具有多路独立通道,输入捕获,输出比较,也可作为时基。
  • 高级定时器(TIM1和TIM8)
    功能:除具备通用定时器所有功能外,还具备带死区控制的互补信号输出、刹车输入等功能 (可用于电机控制、数字电源设计等)。

定时器时钟设置

在这里插入图片描述

  • 选择定时器时钟来源(内部时钟)
    Clock Source(时钟来源)

  • 定时器设置
    Prtscaler (定时器预分频系数):72-1
    Counter Mode(计数模式) : Up(向上计数模式)
    Counter Period(自动重装载值) : 5000-1
    CKD(时钟分频因子) : No Division 不分频 (可以选择二分频和四分频 )
    auto-reload-preload(自动重装载) : Enable 使能

  • 计数器周期计算公式
    T = (psc+1)(arr+1)/Tclk
    psc:定时器预分频系数
    arr:自动重装载值
    Tclk:系统时钟频率

  • 计算举例
    1/[72/(71+1)]*(4999+1)=5ms

在这里插入图片描述

打开定时器1计数溢出中断

在这里插入图片描述

首先要开启定时器中断:

在这里插入图片描述

HAL_TIM_Base_Start_IT(&htim6);

编写中断回调函数:

/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM6){HAL_GPIO_TogglePin(GPIOC, LED_test_Pin);		//toggle the pin}
}
/* USER CODE END 4 */

外部中断

端口功能配置如下:
1、模式配置为上升沿、下降沿和双边沿触发模式。
2、更据硬件原理图来设置输出上拉或下拉。
3、User Label建议定义一个自己喜欢见名知意的名字,方便写程序时查看和方便使用。

模式配置说明如下:

在这里插入图片描述

优先级分为:抢占优先级,子优先级。都是 值越小,优先级越大。即 为0 时,优先级最大。

配置完EXTI了之后,就可以进行配置NVIC了,主要设置中断使能、中断分组、中断优先级等信息。如下图所示:

在这里插入图片描述

下面就是GPIO的中断回调函数,别的中断回调函数函数名不一样,此函数入口参数是引脚号,PA1就是GPIO_PIN_1

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == GPIO_PIN_1){//执行的代码}
}

GPIO配置

在这里插入图片描述

1.配置GPIO的输出电平
2.GPIO的输出模式
3.是否有上拉电阻
4.输出速率
5.用户标签

  • GPIO的输出电平
    低(Low)
    高(High)

  • GPIO的输出模式
    开漏输出 (Output Open Drain)
    推挽输出 (Output Push Pull)

  • 是否有上拉电阻
    浮空输入 (No pull-up and no pull-down)
    上拉输入 (Pull-up)
    下拉输入 (Pull-down)

  • 输出速率
    低(Low)
    中(Medium)
    高(High)

  • 用户标签
    用户自定义,以便于阅读

推挽 开漏 高阻 这都是谁想出来的词??

STC15单片机GPIO模式配置

配置PXM0PXM1寄存器即可:

在这里插入图片描述

片内闪存(Flash)的读写操作

因为STM32的内部FLASH大小不一,不同的大小划分是不一样的,但是大同小异这里是以STM32F103C8T6为例进行说明。

1 字节 = 8 位(bit)
1 千字节(KB)= 1024 字节
1 兆字节(MB)= 1024 千字节(KB)

STM32F103C8T6的内部Flash容量为64KB,即64 * 1024字节,属于小容量产品。

扇区划分

内部Flash存储器被划分为多个扇区,每个扇区的大小为2KB或4KB,具体划分取决于具体的芯片型号。

Flash大小为 64KB,
地址范围:0x08000000-0x08010000-1,单个扇区大小:1KB=0x400,最后一个扇区地址:0x0800FC00

Flash大小为
128KB,地址范围:0x08000000-0x08020000-1,单个扇区大小:1KB=0x400,最后一个扇区地址:0x0801FC00

Flash大小为
256KB,地址范围:0x08000000-0x08040000-1,单个扇区大小:2KB=0x800,最后一个扇区地址:0x0803F800

Flash大小为
512KB,地址范围:0x08000000-0x08080000-1,单个扇区大小:2KB=0x800,最后一个扇区地址:0x0807F800

HAL库提供的代码

HAL_FLASH_Unlock(void); //解锁函数
HAL_FLASH_Lock(void);   //锁定函数
HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data);   //写操作函数
HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError);   //擦除函数
HAL_FLASH_WaitForLastOperation(uint32_t Timeout);   //等待操作完成函数

Flash.c文件

/** Flash.c**  Created on: Apr 13, 2024*      Author: 猪猪侠*/#include "main.h"
#include "Flash.h"
#include "stdio.h"/*FLASH写入程序*/
void FlashWrite(uint32_t Address, uint16_t *Data, uint8_t Length)
{uint8_t i=0;/* 1/4解锁FLASH*/HAL_FLASH_Unlock();/* 2/4擦除FLASH*//*初始化FLASH_EraseInitTypeDef*//*擦除方式页擦除FLASH_TYPEERASE_PAGES,块擦除FLASH_TYPEERASE_MASSERASE*//*擦除页数*//*擦除地址*/FLASH_EraseInitTypeDef FlashSet;FlashSet.TypeErase = FLASH_TYPEERASE_PAGES;FlashSet.PageAddress = Address;FlashSet.NbPages = 1;/*设置PageError,调用擦除函数*/uint32_t PageError = 0;HAL_FLASHEx_Erase(&FlashSet, &PageError);/* 3/4对FLASH烧写*/for(i=0; i<Length; i++){HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Address+2*i, Data[i]);	//以半个字节的大小存储}/* 4/4锁住FLASH*/HAL_FLASH_Lock();
}void FlashRead(uint32_t Address, uint8_t *Data, uint8_t Length)
{uint8_t i;for (i=0; i<Length; i++){Data[i] = *(__IO uint8_t *)(Address + i); // 以字节bit为单位读取Flash}
}

Flash.h文件

/** Flash.h**  Created on: Apr 13, 2024*      Author: 猪猪侠*/#ifndef INC_FLASH_H_
#define INC_FLASH_H_#define FLASH_SAVE_ADDR  (0x0800FC00)	//将数据存储在最后一个扇区void FlashWrite(uint32_t Address, uint16_t *Data, uint8_t Length);
void FlashRead(uint32_t Address, uint8_t *Data, uint8_t Length);#endif /* INC_FLASH_H_ */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完美落地的自动化测试框架(pytest):智能生成?业务依赖?动态替换?报告构建?你来,这儿有!

前言 随着软件测试行业的快速发展&#xff0c;去测试化、全员测开化的趋势&#xff0c;技术测试已成为确保软件质量不可或缺的一环。 但对于许多没有代码基础或缺乏系统性自动化知识的测试人员来说&#xff0c;如何入手并实现高质量的自动化测试成为了一个挑战。 为此&#xff…

C语言 图形化界面方式连接MySQL【C/C++】【图形化界面组件分享】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;MySQL之旅_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一.配置开发环境 二…

基于Java-SpringBoot-VUE-MySQL的企业财务报销系统

基于Java-SpringBoot-VUE-MySQL的企业财务报销系统 登陆界面 联系作者 如需本项目源代码&#xff0c;可扫码或者VX:bob1638 联系作者。 主页-02 系统功能持续更新中。。。 介绍 本系统是采用现代信息技术手段&#xff0c;采用JAVA开发语言&#xff0c;VUE语言&#xff0c;HTML语…

python导入非当前目录(如:父目录)下的内容

在开发python项目时&#xff0c;通常会划分不同的目录&#xff0c;甚至不同层级的目录&#xff0c;这时如果直接导入不在当前目录下的内容时&#xff0c;会报如下的错误&#xff1a;ModuleNotFoundError: No module named miniai其实这里跟操作系统的环境变量很类似的&#xff…

WMS仓储管理系统高效驱动制造企业物料管理

在现代制造业的快速发展中&#xff0c;仓储管理作为供应链的核心环节&#xff0c;其效率直接影响到企业的生产力和市场竞争力。随着科技的进步&#xff0c;实施WMS仓储管理系统逐渐成为推动仓储管理向智能化转型的关键力量。本文将深入探讨WMS仓储管理系统如何以创新的方式驱动…

使用 C# 学习面向对象编程:第 1 部分

介绍 C# 完全基于面向对象编程 (OOP)。首先&#xff0c;类是一组相似的方法和变量。在大多数情况下&#xff0c;类包含变量、方法等的定义。当您创建此类的实例时&#xff0c;它被称为对象。在此对象上&#xff0c;您可以使用定义的方法和变量。 步骤1. 创建名为“LearnClass…

【深度学习】NLP,Transformer讲解,代码实战

文章目录 1. 前言2. Transformer结构训练过程1. 输入嵌入和位置编码2. 编码器层2.1 单头的注意力机制(便于理解)2.2 多头的注意力机制(Transformer真实使用的)2.3 残差连接和层归一化2.4 前馈神经网络&#xff08;FFN&#xff09;2.5 残差连接和层归一化2.6 总结 3. 解码器层 推…

Oracle数据库连接并访问Microsoft SQL Server数据库

Oracle数据库连接并访问Microsoft SQL Server数据库 说明&#xff1a;  1.实际开发中&#xff0c;Oracle数据库与SQLServer数据库之间可能需要相互进行访问&#xff0c;方便业务数据抽取&#xff0c;编写视图及表等操作。  2.SQLServer访问Oracle数据库配置相对较为简单&…

MySQL高性能(SQL性能分析)

MySQL性能系列 SQL性能分析 前言1.SQL执行评率2. 慢查询日志3. profile详情4. Explain执行计划4.1. Explain — id4.2. Explain — type4.3. Explain — table4.4. Explain — key 前言 本篇文章采用的MySQL版本是8代&#xff0c;同时自己使用的是Linux mysql8&#xff0c;本篇…

msfconsole利用Windows server2008cve-2019-0708漏洞入侵

一、环境搭建 Windows系列cve-2019-0708漏洞存在于Windows系统的Remote Desktop Services&#xff08;远程桌面服务&#xff09;&#xff08;端口3389&#xff09;中&#xff0c;未经身份验证的攻击者可以通过发送特殊构造的数据包触发漏洞&#xff0c;可能导致远程无需用户验…

数据结构与算法笔记:基础篇 - 红黑树(上):为什么工程中都用红黑树这种二叉树?

概述 上两篇文章&#xff0c;我们依次讲解了树、二叉树、二叉查找树。二叉查找树是最常用的一种二叉树&#xff0c;它支持快速插入、删除、查找操作&#xff0c;各个操作的时间复杂度跟树的高度成正比&#xff0c;理想情况下&#xff0c;时间复杂度是 O ( l o g n ) O(logn) …

互联网应用主流框架整合之SpringMVC初始化及各组件工作原理

Spring MVC的初始化和流程 MVC理念的发展 SpringMVC是Spring提供给Web应用领域的框架设计&#xff0c;MVC分别是Model-View-Controller的缩写&#xff0c;它是一个设计理念&#xff0c;不仅仅存在于Java中&#xff0c;各类语言及开发均可用&#xff0c;其运转流程和各组件的应…

双列集合 HashMap以及TreeMap底层原理

双列集合 特点&#xff1a; 双列集合一次需要存一对数据&#xff0c;分别为键和值 键不能重复&#xff0c;值可以重复 键和值是一一对应的&#xff0c;每个键只能找到自己对应的值 键和值这个整体在Java中叫做“Entry对象” Map的常见API Map是双列集合的顶层接口&#xff0c;…

基于SpringBoot二手图书管理系统

摘 要 本毕业论文设计并实现了一款基于 Spring Boot 的二手图书管理系统。该系统旨在解决传统图书管理系统存在的一系列问题&#xff0c;如用户体验不佳、功能单一等。首先&#xff0c;论文详细分析了当前二手图书市场的需求和存在的问题&#xff0c;明确了设计该系统的必要性…

你还不知道无线PLC?

随着技术的不断发展&#xff0c;工业控制系统也在经历着革新。无线PLC&#xff08;Programmable Logic Controller&#xff0c;可编程逻辑控制器&#xff09;是一种结合了无线通讯技术和传统PLC系统的创新型技术。它为工业自动化提供了一种更灵活、更便捷的解决方案&#xff0c…

简单聊聊大数据解决方案

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

IO流(转换流)

InputStreamReader&#xff08;字符输入转换流 &#xff09; 解决不同编码时&#xff0c;字符流读取文本内容乱码的问题 public static void main(String[] args) {try (//1.得到文件的原始字节流(GBK的字节流形式)FileInputStream is new FileInputStream("src/666.tx…

C语言 | Leetcode C语言题解之第135题分发糖果

题目&#xff1a; 题解&#xff1a; int candy(int* ratings, int ratingsSize) {int ret 1;int inc 1, dec 0, pre 1;for (int i 1; i < ratingsSize; i) {if (ratings[i] > ratings[i - 1]) {dec 0;pre ratings[i] ratings[i - 1] ? 1 : pre 1;ret pre;inc…

2024PTA算法竞赛考试编程题代码

目录 前言 题目和代码 L1-006 连续因子 L1-009 N个数求和 L2-004 这是二叉搜索树吗&#xff1f; L2-006 树的遍历 L2-007 家庭房产 L4-118 均是素数 L4-203 三足鼎立 L2-002 链表去重 L2-003 月饼 L2-026 小字辈 L4-201 出栈序列的合法性 L4-205 浪漫侧影 前言 所…

理解 Java 中的 `final` 关键字

理解 Java 中的 final 关键字 final 关键字是 Java 编程语言中一个重要的修饰符&#xff0c;它可以应用于类、方法和变量。理解 final 的用法和作用对于编写稳健和高效的 Java 代码至关重要。在本文中&#xff0c;我们将深入探讨 final 关键字的各种用法及其意义。 一、final…