![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
嵌入式STM32及操作系统
文章平均质量分 88
主要学习stm32的HAL库下的各种代码及实现记录,以及操作系统包括Linux、RT-Thread、FreeRTOS的学习
贾saisai
研一咸鱼
展开
-
stm32f103c6t6下的HAL库搭建三种低功耗模式及实战分析(stm32通用)
睡眠模式:只有内核时钟关闭,外设仍在运行;可以通过任意一个中断或唤醒事件唤醒;唤醒后回到睡眠的位置向后执行。(CM3内核停止,外设仍然运行)(数据保存)停止模式:关闭内核时钟、外设时钟,保留内核1.8V供电,寄存器和RAM中的数据可以保持,IO口状态也可保持;可以通过任意一个外部中断唤醒;唤醒后可回到停止的代码处向后执行,但要重新初始化时钟和外设。(所有时钟都停止)(数据保存)原创 2022-10-29 12:36:58 · 6610 阅读 · 8 评论 -
自制stm32F103c6t6出现No target connected或者Internal command error的原因猜测和解决方法
刚刚焊好的最小系统板,在使用ST-LINK下载程序的时候,发现没有啥问题,之后再下载的时候便出现了这样的问题,怀疑是单片机供电出现了问题,但是每个脚都供好了电,网上说可能是电源电压不稳定,还有待测试。解决方法:先按住复位键一两秒,然后点击setting...原创 2022-04-10 15:07:20 · 1154 阅读 · 0 评论 -
MATLAB串口通信使STM32出现复位情况分析
数据终端准备好 DTR(Data Terminal Ready)请求发送 RTS(Request To Send)而STM32有一种串口下载方式。平常不怎么用:CH340下载程序时DTR和RTS的电平变化分析当没有下载的时候,DTR和RTS为高电平。下载程序时,一般是DTR先拉低,然后RTS再拉低,之后DTR拉高,RTS也拉高。原创 2023-05-26 21:28:25 · 1282 阅读 · 0 评论 -
Linux嵌入式学习之Ubuntu入门(五)汇编语法学习
嵌入式的汇编涉及到堆栈,SP指针,以及DDR初始化。.text 表示代码段。.data 初始化的数据段。.bss 未初始化的数据段。.rodata 只读数据段。. section . testsection @定义一个 testsetcion 段。原创 2023-04-16 16:27:06 · 916 阅读 · 0 评论 -
Linux嵌入式学习之Ubuntu入门(四)Makefile
在Linux下,借助例如gcc编译器编译时,如果有很多的文件:1、如果工程没有编译过,那么工程中的所有.c 文件都要被编译并且链接成可执行程序。2、如果工程中只有个别 C 文件被修改了,那么只编译这些被修改的 C 文件即可。3、如果工程的头文件被修改了,那么我们需要编译所有引用这个头文件的 C 文件,并且链接成可执行文件。gcc [选项] [文件名字]主要选项如下:-c: 只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。原创 2023-04-13 20:20:42 · 800 阅读 · 0 评论 -
Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限
用户、用户组及文件权限原创 2023-04-12 15:33:02 · 1627 阅读 · 0 评论 -
Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等
继续学习Ubuntu操作。原创 2023-04-11 11:50:46 · 2799 阅读 · 0 评论 -
Linux嵌入式学习之Ubuntu入门(一)基本命令、软件安装、文件结构、编辑器介绍
终于决定开始学习嵌入式Linux了,在某宝买了正点原子的阿尔法 MX6ULL Linux开发板,记录一下学习过程。原创 2023-04-10 19:52:16 · 1183 阅读 · 0 评论 -
Linux嵌入式学习之Ubuntu入门(六)shell脚本详解
最近痛定思痛,觉得自己应该硬杠Linux,确实有些难度,但是我觉得学习之后一定会大有用处,而且我不希望局限在当下的情况,学习完嵌入式Linux之后,我想学习制作一些更加有难度,更加锻炼人的东西。内容有些多,我觉得最好是过一遍,好好记录一下,一些开发最好把暂时用不到的模块跳过,时间不够。原创 2023-10-03 16:57:20 · 2124 阅读 · 0 评论 -
嵌入式C语言知识复习和提高
在嵌入式开发的时候,发现由于没有系统学习过C语言时,导致编程时只会一些简单语法,既导致开发效率低,又导致程序结构很差,于是打算重新学习一下C语言。c语言入门这一篇就够了-学习笔记(一万字)格式:#define 标识符 字符串以“#”开头的为预处理命令,“define”为宏定义命令,“标识符”为所定义的宏名,“字符串”可以是常数、表达式、格式串等。宏名一般用大写字母,以便与变量名区别开来,但用小写也没有语法错误。对程序中用双引号扩起来的字符串内的字符,不会进行宏的替换操作#define R10。原创 2023-09-19 16:12:45 · 368 阅读 · 0 评论 -
FreeRTOS实时操作系统(十六)内存管理
heap_5 内存管理算法是在 heap_4 内存管理算法的基础上实现的,但是 heap_5 内存管理算法在 heap_4 内存管理算法的基础上实现了管理多个非连续内存区域的能力,heap_5 内存管理算法默认并没有定义内存堆 ,需要用户手动指定内存区域的信息,对其进行初始化。heap_4使用了首次适应算法(第一个满足条件的内存块),也支持内存的申请与释放,并且能够将空闲且相邻的内存进行合并,从而减少内存碎片的现象。返回值:返回一个指针 ,指向已分配大小的内存。*pv:指针指向一个要释放内存的内存块;原创 2023-07-15 19:00:25 · 616 阅读 · 0 评论 -
FreeRTOS实时操作系统(十五)Tickless低功耗模式
此宏用于使能低功耗 Tickless 模式此宏用于定义系统进入相应低功耗模式的最短时长(>1)此宏用于定义需要在系统进入低功耗模式前执行的事务,如:进入低功耗前关闭外设时钟,以达到降低功耗的目的此宏用于定义需要在系统退出低功耗模式后执行的事务,如:退出低功耗后开启之前关闭的外设时钟,以使系统能够正常运行。原创 2023-07-15 12:18:47 · 599 阅读 · 0 评论 -
FreeRTOS实时操作系统(十四)软件定时器
3.软件定时器的超时回调函数是在软件定时器服务任务中被调用的,服务任务不是专为某个定时器服务的,它还要处理其他定时器。1.软件定时器的超时回调函数是由软件定时器服务任务调用的,软件定时器的超时回调函数本身不是任务,因此不能在该回调函数中使用可能会导致任务阻塞的 API 函数。单次定时器:单次定时器的一旦定时超时,只会执行一次其软件定时器超时回调函数,不会自动重新开启定时,不过可以被手动重新开启。软件定时器是指具有定时功能的软件,可以设置定时周期,在回调函数中进行信息处理,只要内存够可以创建非常多。原创 2023-07-13 18:42:17 · 581 阅读 · 0 评论 -
FreeRTOS实时操作系统(十三)任务通知
计数型信号量和二值信号量没啥区别,就是多次进行了任务通知,采用pdTRUE的形参在接收任务通知的时候,将通知值全部清空。任务通知:用来通知任务的,任务控制块中的结构体成员变量 ulNotifiedValue就是这个通知值。用于获取通知值和清除通知值的指定位值,适用于模拟队列和事件标志组,使用该函数来获取任务通知。用于接收任务通知值,可以设置在退出此函数的时候将任务通知值清零或者减一。等待通知:接收方已经准备好了(调用了接收任务通知函数),等待发送方给个通知。原创 2023-07-12 12:06:17 · 549 阅读 · 0 评论 -
FreeRTOS实时操作系统(十二)事件标志组
xClearOnExit:等待到事件标志位后,清除对应的事件标志位,pdTRUE 清除uxBitsToWaitFor指定位,pdFALSE不清除。但是高8位用作存储事件标志组的控制信息,低24位用作存储事件标志,最多存储24个事件标志。事件标志组不同,事件发生的时候,会唤醒所有符合条件的任务,且可以选择保留事件或者清除事件。等待的事件标志位值 :等待事件标志位成功,返回等待到的事件标志位。等待的事件标志位值 :等待事件标志位成功,返回等待到的事件标志位。整数 :清零事件标志位之前事件组中事件标志位的值。原创 2023-07-09 11:07:21 · 337 阅读 · 0 评论 -
FreeRTOS实时操作系统(十一)队列集
队列只允许传递一种数据类型,队列集可以传递多种消息。作用:用于对多个队列或信号量进行“监听”,其中不管哪一个消息到来,都可让任务退出阻塞状态。原创 2023-07-06 20:13:10 · 472 阅读 · 0 评论 -
FreeRTOS实时操作系统(十)信号量
信号量解决同步问题的机制,可以对共享资源的有序访问。当计数值大于0,代表有信号量资源当释放信号量,计数值即资源数加1当获取信号量,信号量计数值减1一般计数值的最大值有限制,最大值为1:二值信号量;最大值不为1:计数型信号量。原创 2023-07-06 13:50:29 · 453 阅读 · 0 评论 -
FreeRTOS实时操作系统(九)时间延时函数及消息队列
队列是任务到任务、任务到中断、中断到任务数据交流的一种机制(消息传递)一般情况下,全局变量的数据无保护,导致数据不安全,当多个任务同时对该变量操作时,数据易受损。当然,如果每次我们都采用临界区代码保护也可以,但是读写队列自带这样的操作,用起来简便在队列中可以存储数量有限、大小固定的数据。队列中的每一个数据叫做“队列项目”,队列能够存储“队列项目”的最大数量称为队列的长度,在创建队列时,指定队列长度以及队列项目的大小。原创 2023-07-02 16:48:33 · 1162 阅读 · 0 评论 -
FreeRTOS实时操作系统(八)任务状态查询及时间统计函数
前提:宏 configUSE_TRACE_FACILITY 和configUSE_STATS_FORMATTING_FUNCTIONS 置 1。State: 任务的壮态信息, X运行态,B 是阻塞态, R 是就绪态, S 是挂起态, D 是删除态。Num : 任务编号,这个编号是唯一的,当多个任务使用同一个任务名的时候可以通过此编号来做区分。C语言中,printf的时候:%#x:以0x的格式输出,%#b:以0b的格式输出。前提:宏 configUSE_TRACE_FACILITY 置 1。原创 2023-06-29 15:42:25 · 1027 阅读 · 0 评论 -
FreeRTOS实时操作系统(七)时间片调度及RTOS的滴答定时器
在学习正点原子的时间片调度的教程中,突然要改变滴答定时器的中断频率,而我之前对这方面没有一点点了解,所以需要详细补充一下这个知识点。原创 2023-06-25 19:57:25 · 3408 阅读 · 3 评论 -
FreeRTOS实时操作系统(六)列表与列表项
pxIndex仍然指向的是末尾列表项,所以这个时候删除列表项后,pxIndex也还指向的是末尾列表项。校验列表项的数据完整性、用于降序排列的值、指向下一个链表项、指向上一个链表项、列表项的拥有者(通常是任务控制块)、指向列表项所在的列表、校验列表项的数据完整性。列表项的数目是由后期添加的个数决定的,随时可以改变。首先,创建了三个列表项,每个列表项都有自己的地址,然后我们对各个函数进行测试,在第五步列表项3插入之后,列表的。从上到下代表着:校验值、列表中的列表项的个数、遍历列表项的指针、末尾列表项、校验值。原创 2023-06-22 17:41:36 · 985 阅读 · 0 评论 -
FreeRTOS实时操作系统(五)进入临界区、任务调度器挂起与恢复
一般在中断、任务调度抢占会打断程序。但是在FreeRTOS中,因为任务抢占中断PendSV也在其5-15的优先级管理范围内,只要关闭中断后就完成无法进行任务的抢占和中断。当我们的任务临界区比较长的时候,可能会产生延时中断,挂起任务调度器可以应用在任务内部的临界区,这样其他任务无法抢占,但是又能响应中断。对任务管理器的处理,不关闭中断,仅仅防止了任务之间的资源争夺,中断还是可以直接相应。进入:taskENTER_CRITICAL_FROM_ISR()临界区:是指那些必须要完整运行的,不能被打断的代码。原创 2023-06-20 20:30:10 · 1458 阅读 · 2 评论 -
FreeRTOS实时操作系统(四)中断任务管理
跟着正点原子学习一下中断管理,正好之间没有总结过,还有些地方不清楚。原创 2023-06-20 11:44:45 · 3076 阅读 · 0 评论 -
FreeRTOS实时操作系统(三)任务挂起与恢复
继续跟着正点原子学习FreeRTOS之任务挂起与恢复。原创 2023-06-18 20:43:04 · 1487 阅读 · 0 评论 -
FreeRTOS实时操作系统(二)任务创建与任务删除(HAL库)
接着学习正点原子的FreeRTOS教程,涉及到一些详细的系统内文件代码。原创 2023-06-17 22:22:25 · 1530 阅读 · 0 评论 -
FreeRTOS实时操作系统(一)RTOS的基本概念
最近买了把75系列的机械键盘,没有数字区域,想起来稚辉君曾经做过一把客制化键盘,于是下载了资料准备学一学,网上很多开源的都是用的ATMEGA32U4制作的,稚辉君用stm32f103cbtx就做出来了,让我很佩服,打开资料后发现软件部分涉及到了操作系统,于是打算学一下FreeRTOS。大部分还是参考正点原子的教程,本篇只是一些基本概念,无具体代码内容学习免费的实时操作系统(Real-time operating system for microcontrollers)原创 2023-06-16 21:28:56 · 2926 阅读 · 0 评论 -
嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信
大概学完这三种通信后,之后就先去学系统移植,其他的先暂时放下串口全称叫做串行接口,通常也叫做 COM 接口。UART:(Universal Asynchronous Receiver/Trasmitter)通用异步串行收发器。USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行收发器,相比 UART多了一根时钟线,一般 USART 是可以作为 UART使用的(不使用同步功能)。原创 2023-10-11 17:37:20 · 637 阅读 · 0 评论 -
嵌入式Linux裸机开发(六)EPIT 定时器
前面学的快崩溃了,这也太底层了,感觉学好至少得坚持一整年,我决定这节先把EPIT学了,下面把常见三种通信大概学一下,直接跳过其他的先学移植了,有些太多了内容。EPIT(Enhanced Periodic Interrupt Timer)增强周期中断定时器,EPIT是专门完成此功能的,PWM、输入捕获那些事其他外设完成的。EPIT是32位的向下计数的定时器,有12位的分频,当计数值等于比较值的时候就产生中断。原创 2023-10-11 12:22:43 · 670 阅读 · 0 评论 -
嵌入式Linux裸机开发(五)中断管理
最近在学习中发现,学Linux嵌入式不仅是对Linux的学习熟悉,而且还是对Cortex-A内核的学习掌握没怎么看懂,内容太多了,我觉得暂时先搞清楚一些原理概念以及简单的外部函数接口就行,内部可能在后续的学习中进行钻研GIC目前有V1-V4,V1太老淘汰了,GIC V2 是给 ARMv7-A 架构使用的,比如 Cortex-A7、 Cortex-A9、 Cortex-A15 等,V3 和 V4 是给 ARMv8-A/R 架构使用的,也就是 64 位芯片使用的。原创 2023-10-10 22:06:36 · 237 阅读 · 0 评论 -
嵌入式Linux裸机开发(四)IMX6U主频和时钟配置
默认配置下 I.MX6U 工作频率为 396MHz,但该系列标准工作频率事528MHz,有些型号甚至可以工作到696MHz。默认情况下内部 boot rom 会将 I.MX6U 的主频设置为 396MHz,下面介绍如何配置为528MHz暂时先这样,先不深入学习了,内容太多了。原创 2023-10-07 20:23:06 · 203 阅读 · 0 评论 -
嵌入式Linux裸机开发(三)SDK移植及BSP管理
在前面学习了LED驱动的汇编开发和C语言开发,但是很明显,这太麻烦了,效率太低了。原创 2023-10-07 09:44:35 · 383 阅读 · 0 评论 -
嵌入式Linux裸机开发(二)C语言LED驱动
前面学习了如何用汇编LED驱动,现在学习如何用汇编构建C语言环境,完成C语言的LED驱动。在开发STM32F103的时候,启动文件 startup_stm32f10x_hd.s 这个汇编文件就是完成 C 语言环境搭建的,当然还有一些其他的处理,比如中断向量表等等。原创 2023-10-05 16:52:43 · 181 阅读 · 0 评论 -
嵌入式Linux裸机开发(一)基础介绍及汇编LED驱动
现在开始正式在开发板上进行开发,仍然看的是正点原子的资料使用的是Cortex-A7点击芯片名字打开介绍,主要参考的手册是:以及数据手册:对于一般的STM32来说,IO的表现形式为:管教名为PA1,管脚的功能在倒数第二列对于IMX6ULL,IO形式在参考手册里面,且没有上面的表格:目录列表即管教名:SNVS_TAMPER2这样格式的,是对寄存器介绍的。下图的这两种,有MUX的表示本节介绍的是复用功能配置其电气模式:就是速度、上下拉类似stm32那些Cortex-A汇编的功能:参考S原创 2023-10-04 19:35:44 · 447 阅读 · 0 评论 -
RT-Thread学习(一)简介及基础环境配置
之前学习了FreeRTOS,但是一直想深入学习,但是没有人指导,又不知道该如何学习,于是再学习一个操作系统看看情况。RT-Thread是一个物联网操作系统,几乎支持所有主流的MCU和Wi-Fi芯片,实时多线程操作系统,主要用在32位的MCU上面。物联网(Internet Of Things,IoT),RT-Thread是一个IoT OS。有标准版本,裁剪后只需要3KB Flash、1.2KB RAM 内存资源的 NANO(轻量级) 版本,还有在标准版本上增加了用户态创造而来的smart版本。原创 2024-01-14 10:54:17 · 951 阅读 · 0 评论 -
嵌入式杂散知识点总结
主要是记录一些杂散的嵌入式知识点8位和32位单片机最本质区别,2分钟看懂!半导体指PN结,晶体管指一切以半导体材料为基础的单一元件,而像芯片,三极管等叫半导体器件。氮化镓充电器采用的是新型半导体,损耗更小。原创 2024-02-28 09:37:06 · 932 阅读 · 0 评论 -
RT-Thread学习(二)RTT内核框架介绍
内核资源占用最小为3KB ROM和1.2KB RAM线程调度:基于优先级的全抢占式多线程调度,只有中断处理函数、调度器锁定和禁止中断的代码不可抢占;0代表最高优先级(和stm32的中断优先级排布一样,0最高),最低优先级给IDLE线程;相同优先级采用时间片轮转调度;线程数目只受硬件内存的限制;调度器切换时,寻找就绪态最高优先级的线程所花时间一样。原创 2024-02-28 10:00:15 · 950 阅读 · 0 评论 -
HAL库(STM32CubeMX)之外部中断(STM32F103C8T6)
不同IO时钟对应的总线:(简单利用HAL库找一下,具体的还要看stm32的参考手册)这里的函数名字有些奇怪:EXTI15_10_IRQHandler。标准库还是需要自己明白许多外部中断线与IO口,时钟线对应关系的。仍然是weak定义的,可以自己重新定义编写该函数。在NVIC中使能外部中断,并分配优先级。如图,只有0-4是单独的。原创 2023-03-29 13:09:40 · 1504 阅读 · 0 评论 -
HAL库(STM32CubeMX)之看门狗学习及实操(STM32F767IGTX)
窗口看门狗(WWDG):设置一个窗口值,窗口下限一般是定死的64,窗口上限可以自定义(肯定要比自动重装载值小),只有在这个窗口内喂狗才行,否则将引起芯片复位。严格限定喂狗时间段。这里使能早期唤醒中断,并开启中断,系统出现问题,喂狗函数没有生效,那么在计数器由减到0x40 (0x3f+1) 的时候,便会先进入中断,之后才会复位,你也可以在中断里面喂狗。a)喂狗的操作,必须在主循环里,不能放在定时器中断里,如果出现了主循环跑飞或者陷入某个死循环,定时器中断可能还在正常运行,起不到监测系统正常运行的作用;原创 2022-12-02 18:02:12 · 1627 阅读 · 0 评论 -
FPGA学习笔记(九)SPI学习总结及stm32的HAL库下SPI配置
一、FPGA学习笔记(一)入门背景、软件及时钟约束二、FPGA学习笔记(二)Verilog语法初步学习(语法篇1)三、FPGA学习笔记(三) 流水灯入门FPGA设计流程四、FPGA学习笔记(四)通过数码管学习顶层模块和例化的编写五、FPGA学习笔记(五)Testbench(测试平台)文件编写进行Modelsim仿真六、FPGA学习笔记(六)Modelsim单独仿真和Quartus联合仿真七、FPGA学习笔记(七)verilog的深入学习之任务与函数(语法篇3)八、FPGA学习笔记(八)同步/异步信号的打拍分原创 2022-12-06 19:40:21 · 2895 阅读 · 0 评论 -
蓝桥杯国赛之温湿度传感器学习笔记
传感器上电后,要等待 1s 以越过不稳定状态,在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。工作概况DHT11是单线接口数字温湿度传感器,温度测量范围是0-50℃,湿度测量范围是20%-90%RH,温度测量精度是±2℃,湿度测量精度是±5%R。采用单线双向传输,所以数据引脚需要不停在读功能和输出功能切换。一次完整的数据传输为40bit,高位先出,数据格式为:8bit湿度整数数据 + 8bit湿度小数数据 + 8bi温度整数数据 + 8bit温度原创 2022-06-08 13:10:14 · 661 阅读 · 0 评论