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_ */

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python教程】3-控制流、循环结构与简单字符串操作

在整理自己的笔记的时候发现了当年学习python时候整理的笔记&#xff0c;稍微整理一下&#xff0c;分享出来&#xff0c;方便记录和查看吧。个人觉得如果想简单了解一名语言或者技术&#xff0c;最简单的方式就是通过菜鸟教程去学习一下。今后会从python开始重新更新&#xff0…

frida hook微信防撤回(PC端)

PC端&#xff1a; 微信的主要功能都是在WeChat\[3.9.10.27]\WeChatWin.dll动态链接库中实现的 直接进IDA分析 都没有符号表 我们需要找一下实现撤回功能的函数&#xff0c;尝试在字符串里搜索revokeMsg 也是有非常多的字符串 我们需要用frida来hook这些字符串来找出撤回实际…

初识volatile

volatile&#xff1a;可见性、不能保证原子性(数据不安全)、禁止指令重排 可见性&#xff1a;多线程修改共享内存的变量的时候&#xff0c;修改后会通知其他线程修改后的值&#xff0c;此时其他线程可以读取到修改后变量的值。 指令重排&#xff1a;源代码的代码顺序与编译后字…

【学习】DCMM认证提升企业竞争优势的表现

DCMM认证是企业提升数据管理能力的重要途径。它不仅可以帮助企业评估自身的数据管理水平&#xff0c;还可以为企业提供改进的方向和目标。在数字化时代&#xff0c;拥有强大的数据管理能力是企业成功的关键。因此&#xff0c;通过DCMM认证&#xff0c;企业可以更好地适应数字化…

ARM交叉编译

目录 一、介绍 1、本地编译 2、交叉编译 二、交叉工具链 1、概念 2、工具 3、获取方法 三、交叉编译运行程序 1、pc机操作&#xff08;x86_64&#xff09; ​2、开发板操作&#xff08;ARM&#xff09; 一、介绍 1、本地编译 本地编译是在与目标运行环境相同的机器上…

大模型训练的艺术:从预训练到增强学习的四阶段之旅

文章目录 大模型训练的艺术&#xff1a;从预训练到增强学习的四阶段之旅1. 预训练阶段&#xff08;Pretraining&#xff09;2. 监督微调阶段&#xff08;Supervised Finetuning, SFT&#xff09;3. 奖励模型训练阶段&#xff08;Reward Modeling&#xff09;4. 增强学习微调阶段…

FreeRTOS消息队列

消息队列简介 队列是为了任务与任务、 任务与中断之间的通信而准备的&#xff0c; 可以在任务与任务、 任务与中断之间传递消息&#xff0c; 队列中可以存储有限的、 大小固定的数据项目。任务与任务、 任务与中断之间要交流的数据保存在队列中&#xff0c; 叫做队列项目。 队…

【博士每天一篇文献-综述】Modularity in Deep Learning A Survey

阅读时间&#xff1a;2023-12-8 1 介绍 年份&#xff1a;2023 作者&#xff1a;孙浩哲&#xff0c;布朗克斯医疗卫生系统 会议&#xff1a; Science and Information Conference 引用量&#xff1a;4 论文主要探讨了深度学习中的模块化&#xff08;modularity&#xff09;概念…

ROS学习记录:C++节点发布自定义地图

前言 ROS栅格地图格式 在了解了ROS地图消息包的数据结构后(链接在上)&#xff0c;本文将编写一个节点&#xff0c;发布地图消息包&#xff0c;看看在RViz中显示是什么效果。 一、准备 1、为了简单起见&#xff0c;发布一个两行四列的地图 2、为了便于观测&#xff0c;只对地…

沐风老师3DMAX一键多孔结构建模插件Porous使用方法

​3DMAX一键多孔结构建模插件Porous使用教程 3dMax是大家熟知的3D建模软件之一&#xff0c;其功能非常的强大&#xff0c;在科研绘图领域有着非常广泛的应用&#xff0c;但是由于科研绘图的图形&#xff08;模型&#xff09;一般都属于异形结构&#xff0c;手工绘制建模&#x…

Seq2seq、编码器解码器神经网络

目录 一、Seq2seq 简介二、编码器三、解码器四、编码器-解码器的训练 遇到看不明白的地方&#xff0c;欢迎在评论中留言呐&#xff0c;一起讨论&#xff0c;一起进步&#xff01; 需掌握的前提知识&#xff1a; LSTM、词嵌入 本文参考&#xff1a;【官方双语】编码、解码神经网…

人类记忆优化算法:针对全局优化问题的记忆启发优化器

Human memory optimization algorithm: A memory-inspired optimizer for global optimization problems 24年 Expert Systems With Applications sci一区 原文链接: https://doi.org/10.1016/j.eswa.2023.121597 Zhu D, Wang S, Zhou C, et al. Human memory optimization alg…

【机器学习】GPT-4中的机器学习如何塑造人类与AI的新对话

&#x1f680;时空传送门 &#x1f50d;引言&#x1f4d5;GPT-4概述&#x1f339;机器学习在GPT-4中的应用&#x1f686;文本生成与摘要&#x1f388;文献综述与知识图谱构建&#x1f6b2;情感分析与文本分类&#x1f680;搜索引擎优化&#x1f4b4;智能客服与虚拟助手&#x1…

Web--CSS基础

文章目录 定义方式选择器文本字体背景边框元素展示格式内边距与外边距盒子模型位置浮动flex布局响应式布局 定义方式 行内样式表 直接定义在style属性中&#xff0c;作用于当前标签 <img src "/imges/logo.jpg" alt "" style "width 400"…

时钟影响ADC性能不仅仅是抖动

时钟影响ADC性能除了抖动&#xff0c;还有占空比。 在高速AD采样中&#xff0c;时钟占空比是非常重要的一个参数。时钟信号的上升沿控制ADC的采样&#xff0c;而下降沿控制着信号的保持&#xff0c;在一个周期内才可以完成量化输出&#xff0c;所以必须保持时钟的占空比为50%&…

自动化决策和业务流程类控制的系统前端UI设计开发

自动化决策和业务流程类控制的系统前端UI设计开发

NLP——电影评论情感分析

python-tensorflow2.0 numpy 1.19.1 tensorflow 2.0.0 导入库 数据加载 数据处理 构建模型 训练 评估 预测 1.基于2层dropout神经网络 2.基于LSTM的网络 #导入需要用到的库 import os import tarfile import urllib. request import tensorflow as tf import numpy a…

使用Python批量处理Excel的内容

正文共&#xff1a;1500 字 10 图&#xff0c;预估阅读时间&#xff1a;1 分钟 在前面的文章中&#xff08;如何使用Python提取Excel中固定单元格的内容&#xff09;&#xff0c;我们介绍了如何安装Python环境和PyCharm工具&#xff0c;还利用搭好的环境简单测试了一下ChatGPT提…

小程序名片怎么生成?AI名片生成器源码系统 为企业店铺创建自己的数字名片

在数字化时代&#xff0c;小程序名片已经成为企业店铺展示自身形象、推广产品和服务的重要工具。分享一个AI名片生成器源码系统春哥AI雷达智能名片小程序系统企业商业运营版&#xff0c;含完整代码包和详细的图文安装部署搭建教程&#xff0c;新手也能轻松使用&#xff0c;源码…

MySQL: 索引与事务

文章目录 1. 索引 (Index)1.1 概念1.2 作用1.3 使用场景1.4 索引的使用1.5 索引的使用案例 (不要轻易尝试)1.6 索引背后的数据结构1.7 重点总结 2.事务2.1 为什么要使用事务2.2 事务的概念2.3 事务的使用2.4 对事务的理解2.5 事务的基本特性 1. 索引 (Index) 1.1 概念 索引是…