自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 C语言(链表)

char类型,int类型,还是自定义的结构体类型,在内存中存储所占用的字节数是不同的,但是存储他们地址的指针全都是32位的,根据处理器位数决定的,说句通俗易懂的话就是,门牌号都是32位的,但是户型有大有小。

2025-03-31 19:00:03 282

原创 C语言(队列)

队列最主要的作用就是用来缓存数据,比方说串口接收数据,我们一般定义一个数组来存储数据,但是假如串口数据频率很快,可能这个数组里存储的数据还没处理完,下一组数据又过来了,那么这时候数组里的数据就会被新数据覆盖,导致老数据丢失,像这样就可以通过队列的方式来处理,每收到一个字节的数据都先入列,然后在应用程序同步解析处理,根据先进先出的规则那么老的数据就不会被新的数据覆盖了。球从左边进去的动作叫入列,然后进去的球在管道里排成一个队列,这个叫队列缓存,说白了就类似于一个数组,那么存了五个球就相当于是buff[5];

2025-03-08 20:38:21 803

原创 ARM架构与编程(基于STM32F103)第五章 异常与中断

在ARM架构中,中断源其实就是异常,而本节就是要讲在ARM架构中,CPU是如何处理异常和中断并且讲述一些其他的概念。

2025-03-08 11:29:58 338

原创 ARM架构与编程(基于STM32F103)ARM单片机启动流程与MAP文件解析

可以把启动流程想象成“起床去上班”:上电/复位:闹钟响了,你醒了。设置堆栈__initial_sp:整理床铺,准备临时放东西的地方。跳转 Reset_Handler:开始起床流程。调用 SystemInit:洗漱、穿衣服(准备硬件)。跳转 __main:吃早餐(准备软件环境)。调用 main:出门上班(运行你的任务)。STM32 的启动流程虽然复杂,但拆开看就很简单,弄懂这个过程,你就掌握了芯片的“开机密码”了。

2025-03-03 21:25:22 990 2

原创 C语言(结构体)

结构体是嵌入式工程师非常常用的数据类型,在开发大型项目中,里面用到结构体的频率是非常高的,举个例子,在RTOS队列中互相传数据,总不能一个变量创建一个队列吧,那代码量和整洁度将会变得非常糟糕,而且在链表等数据结构中使用结构体的频率也是非常高的,有必要好好掌握结构体,进阶成为嵌入式工程师结构体定义由关键字 struct 和结构体名组成,结构体名可以根据需要自行定义。//定义一个结构体//在内部创建你需要的数据类型int age;

2025-02-17 12:18:45 488 1

原创 C语言(指针)

指针是C语言的灵魂所在,几乎后面的高阶用法和高级项目中都缺乏不了指针的存在,我们编写一个函数接口需要用到函数指针,我们写一个队列也需要使用到指针,包括底层的寄存器开发更离不开指针,最近在学习ARM架构和RTOS内核的时候,指针永远都是学习底层绕不开的话题,想进阶成为工程师,那就先过了指针这关吧指针变量的定义的一般形式是:变量类型 *变量名 例如 int *p像这样我们就能定义一个指针类型pint main()int a = 0;return 0;

2025-02-16 12:27:59 740

原创 C语言(枚举类型)

枚举的定义就是:枚举(Enumeration)是一种用户自定义的数据类型用于定义一组具有离散值的符号常量。那通俗一点说就是把一些固定的值,一一列举出来然后起个名字,比方说0是Flase,那么1就是True,枚举类型的应用类似于面向对象编程的思想,都是表示同一类型的数据,比方说一个按键,他的状态有按下和松开,那我就可以把这个按键的状态通过枚举类型让他变成一个独立的对象OFF,ONREADY,WAITING,ERRORREAD_MODE,EDIT_MODE。

2025-02-14 16:22:31 758

原创 ARM架构与编程(基于STM32F103)第四章 纯汇编点灯

接下来我们开始写代码,首先我们使用伪指令,把GPIOB的地址赋给R0,因为我们不能改变R0地址其他位的值,所以我们需要先把R0地址里的值读取出来,然后通过位运算改变我们需要改变的那一位,最后再把值写回到R0寄存器存放的地址里,整体思路和C语言是一样的,到这我们已经使能了GPIOB同时把GPIOB0设置为了输出引脚,现在需要控制输出的值,所以我们要把R0寄存器的值再次改变一下,就到了Loop循环了。

2025-02-01 16:56:28 728

原创 ARM架构与编程(基于STM32F103)第三章 ARM汇编指令

站在CPU的角度,我们访问内存和地址的方式都是一样的,所以对于我们写程序的时候,读写内存和地址的指令也是一样的,访问内存的指令分读单个和读多个,LDR就是把地址中的值读取到CPU当中,而STR就是把CPU的值保存在某个地址中,还有STM和LDM指令就是访问多个内存地址。要学习简单的汇编指令可不能纸上谈兵,至少有一款趁手的工具提供给我们练习,这一款模拟器可以模仿ARM架构下的CPU,实际方便是挺方便,但是他仍然有缺点,首先是缺少外设,其次模拟器的ROM不可读不可写,在实际的CPU中是可以读ROM的。

2025-02-01 12:16:36 1013

原创 ARM架构与编程(基于STM32F103)第二章 ARM架构基础介绍

在ARM架构中支持三种汇编指令集,ARM指令集、Thumb指令集、Thumb2指令集,其中ARM指令集是32位的,高效,但是太占内存,而Thumb指令集是16位的,节约空间但是效率较低,这时候Thumb2诞生了,它支持32位和16位混合编程,融合了二者的优点,我既可以要效率优先也可以要空间优先,ARM汇编指令不需要学多深,也不用我们手搓汇编指令代码,大部分时间都是去阅读其他人写好的代码,不懂的百度查查就行了,如果想深入学习可以参考《ARMCortex-M3与Cortex-M4权威指南》

2025-01-19 23:48:52 613

原创 ARM架构与编程(基于STM32F103)第一章 使用寄存器来控制一个LED灯

在一个单核的CPU中,有若干个功能模块,节约功耗的前提下但并不是每个模块都会被使用的,所以我们想要使用一个模块的功能需要将它的电源和时钟使能,我们选择的这个引脚可能不仅仅可以作为GPIO被使用,也可能连接到UART或者其他的外设资源,所以我们下一步要将选择的这个引脚设置成我们想要的模式(Mode),然后我们需要配置GPIO的方向,也就是输入输出模式,最后设置一下GPIO的数值,让他输出高低电平,或者读取高低电平总结一下单片机控制GPIO的几个步骤,

2025-01-19 12:43:49 804

原创 E2PROM STM32使用I2C协议驱动

使用E2PROM可以保存数据,特点就是掉电不丢失。在我们CT107D开发板上所使用的的器件是AT24C02,一个容量大小是2Kb/s,也就是256字节的E2PROM。24C02是一个基于I2C通信协议的器件。24C01/02/04/08/16 是低工作电压的1K/2K/4K/8K/16K 位串行电可擦除只读存储器,内部组织为128/256/512/1024/2048 个字节,每个字节8 位,该芯片被广泛应用于低电压及低功耗的工商业领域。

2024-12-12 16:03:37 829

原创 STM32 OLED屏幕驱动详解

OLED是有机发光二极管,又称为有机电激光显示(Organic Electroluminescence Display, OLED)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。

2024-12-12 15:49:43 1074

原创 DS18B20温度传感器(STM32)

DS18B20是一种常见的数字型温度传感器,具备独特的单总线接口方式。其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大、硬件简单、易扩展、抗干扰性强等特点。

2024-12-11 15:23:08 1857 3

原创 RFID射频模块RC522通过STM32驱动

RC522 RFID射频模块是一款广泛应用于非接触式RFID系统中的核心组件,由NXP(前身为Philips半导体)公司设计生产。这个模块基于MFRC522芯片,该芯片是一个高度集成的UHF RFID读卡器/写卡器解决方案,能够支持ISO 14443A标准的卡片和标签。

2024-12-11 14:58:33 2329

原创 Keil5的Debug基础使用方式

在我们开发的过程中,会遇到形形色色的问题,有时候我们会使用printf来打印出错误信息,发现到底程序卡死或者崩溃在哪一句,或者使用OLED来显示错误变量,但OLED会欺骗我们的眼睛,而Printf也会打印不出来,这个时候就需要使用强大的Debug功能来一步步运行我们的程序,发现问题到底出现在哪里1、复位:(类似于用复位按键复位),复位之后程序回到最开始处,即复位中断处理函数处2、全速运行:运行到程序断电处停止,如果没有断点就一直运行3、停止运行:字面意思,点一下就停止了。

2024-12-09 20:32:22 1063 1

原创 MQ-2 烟雾浓度传感器

MQ-2烟雾传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当烟雾传感器所处环境中存在可燃气体时,烟雾传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该烟雾传感器气体浓度相对应的输出信号。MQ-2气体烟雾传感器对液化气、丙烷、氢气的灵敏度高,对天然气和其它可燃蒸汽的检测也很理想。这种气体传感器可检测多种可燃性气体,是一款适合多种应用的低成本烟雾传感器。模块特性:MQ-2烟雾传感器在较宽的浓度范围内对可燃气体有良好的灵敏度。

2024-12-09 15:08:18 1002

原创 FreeRTOS的中断管理

FreeRTOS的任务有优先级,MCU的硬件中断有中断优先级,这是两个不同的概念,FreeRTOS的任务管理要用到硬件中断,使用FreeRTOS时候也可以使用硬件中断,但是硬件中断ISR的设计要注意一些设计原则,在本节中我将详细介绍FreeRTOS与硬件中断的关系,以及如何正确使用硬件中断。

2024-09-29 18:53:46 1042 1

原创 【香橙派】Orange pi AIpro开发板评测,与树莓派的横向对比以及实机性能测试

在人工智能领域飞速发展的时代,国产厂商们也是紧随时代的步伐,迅龙公司联合华为推出了一款全新的开发板作为一款建设人工智能新生态的开发板,它可广泛适用于AI边缘计算、深度视觉学习及视频流AI分析、视频图像分析、自然语言处理、智能小车、机械臂、人工智能、无人机、云计算、AR/VR、智能安防、智能家居等领域,覆盖 AIoT各个行业。二、开发板的配置与介绍下图是开箱到手的东西,可以看见配件很齐全,的用料很用心。

2024-07-16 16:48:15 4709 1

原创 FreeRTOS消息队列

通过消息队列服务,任务或中断服务可以将一条或多条数据放入消息队列中,同样一个或多个任务可以从消息队列中获得消息,当有多个消息发送到消息队列时,通常是先进入消息队列的消息先传给任务,也就是说,任务先得到的是最先进入消息队列的消息,既先进先出原则(FIFO),FreeRTOS的队列也支持后进先出原则(LIFO)消息队列可用于发送不定长消息的场合,队列是FreeRTOS主要的任务间通信方式,可以在任务与任务间,中断和任务间传递消息,发送到队列的消息是通过。

2024-07-15 09:01:06 996 1

原创 STM32F1系列硬件I2C移植MPU6050DMP库

配置好硬件I2C拿过来直接用就行,一点也不用改这段时间在移植正点原子的MPU6050的库函数,网络上的教程大部分都是标准库同时也是软件模拟I2C的形式,这里我把正点原子的函数移植成了HAL库的硬件I2C的,下面会附带工程源码。

2024-04-05 13:28:15 1263 7

原创 STM32CubeMX与HAL库开发教程八(串口应用/轮询/中断/DMA/不定长数据收发)

前面我们简单介绍过串口的原理和初步的使用方式,例如怎么配置和简单的收发,同时我们对串口有了一个初步的了解,这里我们来深入的来使用一下串口。

2024-03-16 19:59:50 1290 2

原创 FreeRTOS任务管理(创建、删除、挂起、恢复)

3、在FreeRTOS中,创建任务所需要的内存需要在空闲任务中释放,如果用户在FreeRTOS中调用了这个函数的话,一定要让空闲任务有执行的机会,否则这部分内存无法释放,另外,创建的这个任务在使用中申请了动态内存,这个内存不会因任务被删除而释放,这一点要注意,一定要在删除任务前将内存释放。每个任务在自己的环境中运行,在任何时刻,只有一个任务得到运行,FreeRTOS调度器决定运行哪个任务,调度器会不断的启动,停止每个任务,宏观上看每个任务都在同时运行。

2024-03-03 21:30:32 1483 1

原创 FreeRTOS启动流程与调试方法

RTOS主要有两种主流的启动方式,我们这里通过伪代码来介绍这两种方式的区别,然后再看看STM32CubeMX生成的代码是哪种启动模式。

2024-03-02 16:42:38 1796

原创 手动移植FreeRTOS与CubeMX配置

复制好之后我们需要整理一下不用的文件,打开portable,保留我选中的三个文件,如果用IAR就删除keil,MemMang是关于内存的一些文件,RVDS则是关于我们单片机架构的一些文件,我这里用的是STM32F103ZET6,则将RVDS中除了这款单片机的其他架构全部删除,只保留ARM-M3内核,只删文件夹啊,不是文件夹的不要删。新建文件夹,将下载好的源码复制到工程中,同时删除portable与RVDS文件夹中多余的文件,注意好我打开源码的路径,将里面这些东西复制到自己工程中新建的文件夹里。

2024-03-01 10:31:48 1136 2

原创 STM32 HAL库常用函数

2024-01-27 21:44:31 832

原创 STM32CubeMX与HAL库开发教程七(IIC通信)

IIC接口是一种串行数字总线接口,IIC接口只有两根信号线,总线上可以连接多个设备,硬件实现简单,可扩展性强,IIC通信协议可以用普通的GPIO口进行软件模拟,IIC接口主要用于通信速率不强,以及多个器件之间通信的应用场景。

2024-01-24 14:40:38 4118 2

原创 STM32CubeMX与HAL库开发教程六(UART串口通信)

UART就是常说的串口,他是一种简单而常用的通信接口,它使用简单,所以很多仪器设备和电路模块都用作通信接口,所以掌握串口的使用方法异常重要,今天我们学习STM32CubeMX串口的操作,以及HAL库串口的配置UART表示通用同步异步收发器,是一种串行通信接口,UART接口最多有五个 信号,而在这五个信号中TX和RX是必须的,一个为输出信号一个为输入信号,在与其他设备连接时,TX要连接设备的RX,而RX要连接设备的TX,而SCLK是发送器输出的时钟信号,这个时钟线只用于同步模式,异步模式无SCLK信号。

2024-01-23 16:57:04 1637

原创 STM32CubeMX与HAL库开发教程五(PWM输出)

PWM就是脉冲宽度调制,是一种对模拟信号电平进行数字编码的方法,PWM波就是具有一定占空比的方波信号,通过定时器的设置可以控制方波的频率和占空比,从而对模拟电压进行数字编码,理论上,只要带宽足够(PWM波的频率足够高)任何模拟值都可以使用PWM进行编码,使用定时器生成PWM波的工作原理是边缘对齐方式其基本工作原理描述如下1、设置自动重装载寄存器ARR的值,这个值决定了PWM波一个周期的长度,比如PWM一个周期是100ms。

2024-01-23 12:03:37 5886 4

原创 STM32CubeMX与HAL库开发教程四(定时器介绍与记时功能)

定时器作为单片机一个重要的外设,它分为高级控制定时器,通用定时器和基础定时器,基础定时器功能简单,只能用于定时,通用定时器和高级控制定时器还具有输入捕获、输出比较、PWM输出等功能,我们会结合STM32CubeMX与HAL库来使用这些功能定时器资源介绍在本章中只介绍两种最常用芯片的定时器资源 STM32F1系列和F4系列单片机STM32F1系列共有8个定时器:高级定时器(TIM1、TIM8)、通用定时器(TIM2、TIM3、TIM4、TIM5)、基本定时器(TIM6、TIM7)。

2024-01-21 21:13:16 2287 1

原创 STM32CubeMX与HAL库开发教程三(外部中断与中断系统)

中断是MCU一个基础的功能,而什么是中断,我们为什么要使用中断,本节我们来介绍什么中断的相关概念与外部中断如何使用。

2024-01-18 16:08:40 1753 3

原创 STM32CubeMX与HAL库开发教程二(GPIO输入/输出)

上一章节我讲述了如何使用STM32CubeMX来建立工程,这节就在上一章的基础上来继续深入了解STM32CubeMX和HAL库如何使用,我们就默认基础设置已经配置完毕(时钟与工程管理)

2024-01-17 15:30:36 1803 1

原创 C语言(运算符)

在C语言和单片机开发中,运算符是经常会用到的东西,学会运算符不仅可以让代码的可读性变好,也是成为高手必须要学会的东西,本篇文章我会详细介绍几个常用的运算符的使用方法。

2024-01-16 15:04:09 1127 1

原创 STM32CubeMX与HAL库开发教程一(CubeMX使用方法)

1、STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎覆盖了STM32 全系列芯片。2、我们为什么使用STM32CubeMX,随着ST停止了标准库的更新,ST官方大力推荐CubeMX与HAL库的使用,虽然现在还是标准库的主场,但是CubeMX的使用率在逐年提高,所以学习下CubeMX的基本使用也是我们需要掌握的技能之一。

2024-01-15 14:34:52 919 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除