自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【GCC-RT-Thread】gcc交叉编译 STM32 - RT-Thread

【GCC-RT-Thread】gcc交叉编译 STM32 - RT-Thread最近在公司实习,公司想将原来在Windows keil上开发的项目移到Linux,并上RTT操作系统,最近就别安排做了这件事。首先下载RT-Thread Nano内核我使用的交叉编译器:gcc-arm-none-eabi-10.3-2021.10编译器下载地址gcc-arm-none-eabi 介绍及安装步骤正式移植开始拷贝内核到工程1.首先在工程目录下建立RT-Thread文件夹2.在下载好的Nano内核

2022-04-16 17:04:22 2383

原创 【GCC】因存在BootLoader,设置启动地址偏移,中断向量表偏移

【GCC】因存在BootLoader,设置启动地址偏移因为加入BootLoader的缘故,我们的用户代码启动位置需要进行一个偏移。在Keil中我们能很方便的设置,在GCC中我们需要在两处进行修改:.ld 文件内 Line64 在flash处做一个偏移地址RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192KCCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64KFLASH (rx) : OR

2022-03-31 19:50:42 2078

原创 【GCC】GCC编译Keil可以编译通过的文件却仍然报错:#error “Please select first the target XXX 以及 undeclared XXX原因以及解决办法

GCC编译Keil可以编译通过的文件却仍然报错:#error "Please select first the target XXX 以及 undeclared XXX原因以及解决办法一般报错有两种:#error “Please select first the target STM32F4xx device used in your application (in stm32f4xx.h file)”问题原因: 缺少指定芯片undeclared + 标准库里的结构体名称,明明头文件也都包

2022-03-31 19:16:45 1691

原创 【Makefile】VPATH 和 vpath 的区别与应用

【Makefile】VPATH 和 vpath 的区别与应用3种寻找文件依赖路径的方法:1.make工具自动获取可以给make命令指定路径,让其在相关路径下自动寻找文件的依赖关系。2.通过VPATH来定义查找的路径PATH(环境变量)VPATH(指定make命令的环境变量)3.通过vpath来定义查找的路径可以指定文件扩展名的方式在路径中查找文件。vpath 使用方法及作用:1.vpath清除所有已经配置好的文件搜索目录2.vpath pattern清除符合模式的文件的搜索路径

2022-03-24 15:12:00 368

原创 【Makefile】Makefile中的“=“ “:=“ “?=“ “+=“ 区别

【Makefile】Makefile中的"=" “:=” “?=” “+=” 区别1. “=”“=” 看上去为最普通的等号,但它并不是直接的赋值等号eg:var1 = avar2 = $(var1)bvar1 = aa#经过上面一系列的赋值最终var1 = aavar2 = aab这是由于make时会把整个makefile展开,拉通后决定变量的值。2. “:=”这才是我们意识中最普通的等号,他就是直接赋值eg:var1 = avar2 = $(var1)bvar1 =

2022-03-24 15:08:24 330

原创 【Makefile】通配符、隐晦规则 、静态模式

【Makefile】通配符、隐晦规则 、静态模式makefile通配符:$@ 表示规则目标文件$^ 表示规则所有的依赖文件$< 表示规则第一个依赖文件$? 表示比目标还要新的依赖文件通配符使用场合:1.规则的目标和依赖中2.规则的命令中在规则中使用通配符:*.c (表示所有后缀为.c的文件)objects = .c (.c并不会被展开)objects := $(wildcard .c) (.c才会被展开)注:wildcard

2022-03-24 14:54:55 231

原创 【Makefile】Makefile简介

【Makefile】简介最近一段时间在学习Makefile,这是做的一些学习笔记,近期会持续更新。makefile的功能:关系到整个工程的编译规则,makefile定义了一系列的规则来制定,哪些文件先编译,哪些文件后编译,哪些文件需要重新编译,甚至进行更复杂的操作。makefile书写规则:顺序对于makefile十分重要,makefile只应该有一个目标,第一条规则的目标为最终目标。makefile执行规则:1.如果这个工程没有编译过,那我们的所有c文件都要编译并被链接。2.如

2022-03-24 14:43:42 224

原创 【嵌入式】gcc-arm-none-eabi 工具链配置和使用

【嵌入式】gcc-arm-none-eabi 工具链配置和使用什么是集成IDE,为什么不选择集成IDE集成IDE (文本编辑器+编译器+调试器)集成IDE使编程变得简单,但阻碍了对编译器以及编译过程的理解同时在集成化的过程中缺少了很多可选择的高级功能。gcc-arm-none-eabi 配置下载地址:https://launchpad.net/gcc-arm-embedded/+download最新只停留在gcc-arm-none-eabi-5_4-2016q3arm官方地址:http

2022-03-07 20:54:48 6362

原创 【C语言】结构体大小的计算(内存对齐)

【C语言】结构体大小的计算(内存对齐)内存对齐原因①一些平台只能在特定的地址处访问特定类型的数据;② 提高存取数据的速度,比如有的平台每次都是从偶地址处读取数据,对于一个int类型的变量,若从偶地址单元存放,则只需要一个读取周期即可,但是从奇地址单元存放,则需要2个读取周期读取该变量。内存对齐原则①结构体变量的首地址能够被其最宽基本类型成员的大小所整除;②结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal add

2021-11-28 13:08:43 572

原创 【C语言】左值和右值

【C语言】左值和右值综述最简单的解释:在赋值运算符 “=” 左边的就是左值,在赋值运算符 “=” 后边的就是右值。但这听起来似乎很不靠谱,还是不能很好地理解。下面更加详细的介绍。概念左值就是一个可被存储的单元右值就是一个可被读取的数据。左值必须是一个被明确了的内存存储单元,可以用来被赋值;右值必须是一个能被读出来的确确实实的值,这个值可以是数据,可以是指针,可以是结构,反正只要能被读出来的,都可以定义为右值。解释实例如 x = 2;这里x为整形变量,这里作为左值,代表的是一块内存单元,表

2021-11-25 22:03:15 1010

原创 【C语言】数组&指针&数组指针&指针数组的定义与区别

【C语言】数组&指针&数组指针&指针数组的定义与区别数组与指针的区别通常指针和数组可以相互替换使用,但两者有如下区别:数组:可以在静态存储区被创建(如全局数组),也可以在栈上被创建,数组对应着一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针:可以指向任意类型的内存块,它的特性是“可变”,所以我们常用指针来操作动态内存。指针比数组灵活,但更危险。数组指针(行指针)形式:int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组

2021-11-25 15:54:44 561

原创 【嵌入式基础】内存结构(text data bss及堆栈)

【嵌入式基础】内存结构(text data bss及堆栈)前言内存分为:代码段(text)、数据段(data)、bss段、堆、栈段(head stack)各段的作用代码段(text):通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。① 存放可执行程序的指令,存储态和运行态都有。② 内存分配为静态。bss段:指那些没有初始化的和

2021-11-24 20:25:40 685

原创 【C语言】static

【C语言】static主要作用1、static修饰局部变量,生存周期为整个源程序,其作用域与变量相同,只能在定义该变量的函数内使用。退出函数后,该变量还继续存在,但不能使用它,再次调用该函数可以再次使用;(1) 该变量在全局数据区分配内存(2) 如果不显示初始化,那么将被隐式初始化为0(3) 它始终驻留在全局数据区,直到程序运行结束(4) 其作用域为局部作用域,当定义它的函数或语句块结束时, 其作用域随之结束。2、static修饰全局

2021-11-24 19:06:51 371

原创 【STM32】CubeMX+HAL库之HRTIM 多路同步独立定时器 DMA传输比较值

前言相较于普通TIM,HRTIM最显著的特点就是可以倍频到最大的32倍,这就可以使得定时器即使工作在较高频率下,仍有较高的分辨率。 因此它主要用于数字电源、照明,电源耗材,太阳能逆变器和无线充电等应用场合,当然,也可以作为通用目的。所用工具:开发板:STM32G474RESTM32CubeMXIDE: Keil-MDK基础知识主定时器(Master Timer):基于 16 位递增计数器。它可通过 4 个比较单元置位/ 复位 定时器的输出,并向其他独立定时器单元(Timer A~Time

2021-09-19 12:55:12 9797 4

原创 【C语言】const用法以及与指针在一起使用时的限定内容

【C语言】【C语言】const用法以及与指针在一起使用时的限定内容前言const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。主要作用(1)可以定义const常量,具有不可变性。 例如:const int Max=100; 如遇到Max++等操作,会产生错误;   (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。   例如: vo

2021-08-20 13:26:05 219

原创 【STM32】CubeMX+HAL库之 硬件IIC+DMA控制OLED(兼容SSD1306&SH1106驱动)

【STM32】CubeMX+HAL库之 硬件IIC+DMA控制1.3寸OLED前言目前网上大多数驱动OLED屏都采用软件IIC,因为HAL库的升级使得硬件IIC的稳定性得到了保障,所以想采用硬件IIC+DMA的方式控制OLED,在最初的时候,换用硬件IIC极其的方便,换到HAL库的接口函数就好了,但打开DMA就炸,仔细想了一下,知道原因 (由于DMA为非阻塞模式,反复调用函数但硬件并未准备好,所以并未执行) 经过拼包DMA发送,CPU的负担大幅降低,显示效果良好。下文从CubeMX的配置开始说起,并

2021-06-25 21:23:14 12789 7

原创 【STM32】CubeMX+HAL库之ADC+DMA

【STM32】CubeMX+HAL库之ADC前言本文首先讲解STM32CubeMX配置多种模式ADC的操作,以及HAL库ADC接口函数,详细的讲解ADC的模式(独立模式、双/三重模式以及扫描模式、连续与间断模式,DMA接收等),本文将HAL库与STM32CubeMX结合在一起讲解,可以更快速的学会ADC的使用。ADC-----模拟量转数字量的转换器。所用工具:开发板:STM32G474RESTM32CubeMXIDE: Keil-MDKSTM32CubeMX ADC配置时钟配置

2021-06-13 13:22:32 13289 6

原创 【STM32】CubeMX+HAL库开发菜单

【STM32】CubeMX+HAL库开发教程为什么要选择CubeMX+HAL,标准库它不香了吗?如何学习教学链接为什么要选择CubeMX+HAL,标准库它不香了吗?随着ST停止了标准库的更新,ST官方大力推荐CubeMX与HAL库的使用,所以在当下CubeMX + HAL就成为了我们需要掌握的技能。下面再来说说CubeMX + HAL的优势:STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者,允许用户使用图形化向导生成C初

2021-04-20 21:51:40 811

原创 【STM32】串口DMA之双缓冲

【STM32】串口DMA之双缓冲前言在前两章节中已经讲述了串口的通常用法, 【STM32】CubeMX+HAL库之串口以及串口DMA空闲中断不定长接收与发送, 【STM32】串口DMA空闲中断不定长收发配自定义装包与解包在本章节我们将介绍DMA双缓冲这一技术。在很多时候数据的发送频率与数据接收使用频率并不一致,数据来的太快,接收者还没来得及对其进行处理,下一帧的数据就到了,并将其覆盖,致使信息的有效性大大减弱。这时我们增加一个缓冲区来存放来不及处理的数据,就能更好地完成任务。双缓冲还有一个重要的应用

2021-04-20 21:46:02 4202

原创 【STM32】串口DMA空闲中断不定长收发配自定义装包与解包

【STM32】串口DMA空闲中断不定长收发配自定义装包与解包前言在上一章节中已经讲述了串口的通常用法, 【STM32】CubeMX+HAL库之串口本章将解决这样的一个问题,有时需要在设备间进行数据传输,由于stm32串口RDR和TDR寄存器都是8位有效的,我们往往需要定义传输协议(如一帧数据中,包含帧头、帧长度、帧CMD、数据帧、帧尾等若干8位数据)。我们希望可以一次收到一帧数据,并进行解码操作。利用DMA+串口空闲中断可以有效完成上述任务。所用工具:开发板:野火挑战者STM32H743IIT6

2021-04-20 01:02:23 1292

原创 【STM32】CubeMX+HAL库之串口

【STM32】CubeMX+HAL库之串口前言本文首先讲解STM32CubeMX配置串口的操作,以及HAL库串口函数接口,详细的讲解各种收发方式(普通收发、中断收发、DMA收发),本系列教程将HAL库与STM32CubeMX结合在一起讲解,可以更快速的学会各种收发方式的使用。UART 是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信,特别适用于远距离通信,但传送速度较慢。可实现全双工。所用工具:开发板:野火挑战者STM32H743IIT6STM32CubeMX

2021-04-18 22:34:16 875

原创 【STM32】CubeMX+HAL库之时钟

【STM32】CubeMX+HAL库之时钟前言时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。 时钟系统就是CPU的脉搏,决定CPU速率,像人的心跳一样 只有有了心跳,人才能做其他的事情,而单片机有了时钟,才能够运行执行指令,才能够做其他的处理 (TIM,串口,ADC,PWM等),时钟的重要性不言而喻。所用工具:开发板:野火挑战者STM32H743IIT6STM32CubeMXIDE: Keil-MDK为什么有那么多总线,还要有时钟树?STM32本身十分复杂,外设非常

2021-04-17 12:50:04 1226

空空如也

空空如也

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

TA关注的人

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