- 博客(135)
- 收藏
- 关注
原创 嵌入式C语言常见考察点(3)
对于 if (ptr!(2)int (*p)[4]:由于括号,所以p先与*结合形成指针,然后与[]结合形成整型数组类型的指针,即这是一个数组指针,类型为int (*)[4],表示这是一个指向包含4个整型元素的数组的指针。(1)int *p[4]:p先与[]结合,形成含4个元素的数组,然后与前面int *形成一个类型为整型指针的数组,即这是一个指针数组,类型为int *[4],表示包含4个整型指针元素的数组。—— 指针,const在*右边,表示该指针不可修改,指针指向的值可以修改,故编译不通过;
2026-08-21 14:58:33
341
原创 基于C语言的SPSC环形缓冲区程序实现
想象一个环形跑道,跑道上有一圈格子,编号 到 。二、结构体里的四个成员2.1 —— 跑道本身外部提供的一块连续内存,生命周期必须比环形缓冲区长。代码不负责分配和释放,只负责往里面读写。要求 必须是 2 的幂(如 128、256、512),则 。任何数 只保留低 位(假设 ),效果等同于 :好处:位运算 比取模 快得多,在单片机/中断里能省不少时钟周期。比赛开始前,小明和小红都站在起点(0号格),跑道长度为 。小明跑过的距离减去小红跑过的距离,就是两人之间的箱子数。为什么无符号减法
2026-08-19 14:30:55
377
原创 嵌入式C语言常见考察点(1)
本文介绍了C语言编程中的10个常见考察点:(1)无临时变量交换数值的两种方法(异或和加减运算);(2)双指针实现字符串原地逆序;(3)数组名与指针在sizeof中的区别;(4)static关键字的两种应用场景(函数内持久化变量和文件内作用域限制);(5)带参数宏的括号使用规范;(6)位操作宏实现(置位/清零/翻转/读取特定位);(7)二维数组地址运算规则;(8)字符串拷贝函数的实现;(9)单链表操作(头插法/删除节点/原地反转);(10)快慢指针检测链表环。
2026-08-07 22:04:02
207
原创 STM32F103C8T6移植FreeRTOS(HAL库版)
使用STM32CubMX生成STM32工程,基于HAL库方式的STM32F103C8T6移植FreeRTOS的流程介绍
2026-08-04 14:38:45
266
原创 01_CAN简介与硬件电路
本文主要介绍了CAN总线基本概念、特点,以及其硬件电路连接,并以TJA1050这款高速CAN收发芯片为例,讲述了CAN收发器的硬件电路和基本工作原理
2026-06-03 17:22:56
398
原创 STM32时钟树之编程实践(补充)
本文介绍了STM32单片机时钟树编程的关键内容。系统上电默认使用8MHz HSI时钟,通过SystemInit()可提升至72MHz。详细阐述了时钟树配置的四大步骤:开启HSE时钟、配置PLL锁相环、设置分频系数、选择系统时钟源。同时说明了Flash指令预取的配置方法,并提供了LED闪烁测试的核心代码。文中既包含寄存器级操作也涉及标准库函数的使用,为STM32时钟系统配置提供了完整的实现方案。
2026-03-08 10:32:33
405
原创 01_电容充放电显示实验
拨动开关2,即电路图中对应S1,红色LED点亮后逐渐变暗;关闭开关2,打开开关3,对应电路图S2,绿色LED被点亮,后逐渐熄灭。01_电容充放电实验效果。
2026-03-02 16:34:13
282
原创 STM32_存储器与寄存器详细介绍
本文介绍了计算机系统中的存储器和寄存器原理及其在STM32微控制器中的应用。存储器部分详细阐述了RAM(SRAM/DRAM)和ROM(MaskROM/Flash等)的分类、特性及发展历程;寄存器部分解析了其作为软硬件桥梁的作用及映射原理
2026-01-15 21:07:20
1117
原创 SPI_硬件SPI案例:W25Q32读写
前面陆续学习了SPI基础知识,完成了软件模拟SPI实现的W25Q32的读写实现,接着继续学习了STM32中自带的SPI外设以及相关常用的寄存器配置内容,那么最后也应该练习一下使用。头文件中,由于本次使用硬件SPI实现,因此不再使用GPIO去直接输出高低电平模拟时序,而是利用硬件自动协调,同时从机W25Q32片选信号控制直接硬件接线,因此片选信号的拉高拉低还需要宏定义一下,接着就是照猫画虎与软件模拟相同的函数接口声明,也是为了尽可能减少上层程序变动。因此,这里主要详细说一下实现硬件SPI的思路。
2026-01-15 11:12:33
830
原创 SPI_STM32的SPI外设及常用寄存器介绍
二、SPI外设功能框图引言前面介绍了一般SPI的基本原理及软件模拟SPI实现了W25Q32闪存存储器的读写操作,本次继续介绍STM32内部自带的SPI外设的相关内容以及常用寄存器的配置内容。一、SPI外设基本介绍笔者使用的是STM32F103ZET6这款型号的STM32单片机,对于STM32 的 SPI 外设,其可用作通讯的主机和从机,支持最高的 SCK 时钟频率为(STM32F103 型号的芯片默认fpclk1为36MHz,fpclk2为72MHz。),完全支持 SPI 协议的。
2026-01-14 22:00:23
1393
原创 SPI_软件模拟案例:读写W25Q32
介绍了基于STM32F103系列单片机使用软件模拟SPI协议实现W25Q32 Flash存储器读写操作的完整过程
2026-01-14 16:09:32
897
原创 SPI_基本原理简单介绍
但因为传输协议上的简易,其传输效率得到的极大的提升,且硬件复杂其实是增加了接线,使得以全双工,因此这样直观来看,SPI至少有一条时钟线、两条数据线,加之多个从设备时的判断可能会有其他复杂度的上升,当然为保证传输速度,该复杂度仍然放在了硬件设计上,相关内容后续介绍。因为前面介绍SPI协议层数据交换过程时,重点在于分析SPI通信过程中主从设备进行数据交换的过程,因而对时钟控制部分进行了简化描述,而在实际情况下,主从设备允许进行数据读取即数据采样的跳变沿是由明确的规定的,即和设置的时钟。,有时候也称NSS线。
2026-01-12 19:48:07
662
原创 ADC_案例练习:独立模式多通道采集
因此,在多通道ADC转换时,我们一般就会借助DMA传输完成电压采集。注:这里还涉及到一个循环模式的设置,原因是ADC多通道转换时设置的连续转换模式,因此ADC转换结果会循环产生,而默认DMA通道传输只会传输1次,因此为了保证DMA传输连续性,也需要开启DMA的循环模式;可见,对于采集可变电阻,使用到的引脚是PC0,其次可使用的ADC通道为ADC123的通道10之一即可,然后引脚另一边是一个可调电阻接VCC,显然当改变电阻阻值时,接入PC0的电压也会改变,也方便观察ADC转换采集到的电压情况。
2026-01-11 20:57:55
817
原创 ADC_案例练习:独立模式单通道转换
由硬件电路图可知,使用到的引脚是PC0,其次可使用的ADC通道为ADC123的通道10之一即可,然后引脚另一边是一个可调电阻接VCC,显然当改变电阻阻值时,接入PC0的电压也会改变,也方便观察ADC转换采集到的电压情况。比如间断转换模式,这个的意思是同时需要处理多通道时,转换几个通道后直接停止转换,过会再进行一部分转换这样的意思,因为这样不是完全连续的转换,因此叫做间断转换模式。然后是ADC的参数配置部分,这里主要在Analog中,选择ADC1,然后选择使用的通道10,即IN10。
2026-01-09 15:38:06
1046
原创 ADC_常用寄存器介绍
而且采样时间是各个通道独立配置,由于ADC外设一个多达18个通道,所需要占用的位一共有3*18=54位,因此也需要两个采样时间寄存器进行配置,所以查看手册的话可以发现有ADC_SMPR1和ADC_SMPR2两个寄存器,且排列是从后往前排的,即最后一个通道的采样时间配置放在SMPR1寄存器,第一个通道的采样时间配置放在SMPR2中了。到这里,基本上常用的寄存器配置就介绍完成了,这里没有专门介绍注入通道组的配置,实际上与规则通道组是类似的,在寄存器名称以及配置位上就是多了一个J,
2026-01-09 11:14:54
1098
原创 ADC_基础知识
他主要是通过逼近法逼近模拟信号的大小实现的,简单来说以电压为例,给定参考电压后,选择一个较大的值去与模拟电压进行比较,如果比模拟电压大就把最近一次加的值换小的,然后再加更小的值继续比较,如果比模拟电压小了就继续加大的,以此类推,不过每次新加的肯定是比之前值小的。通俗来说,因为模拟量本身是一段连续的量,为了将其变成0和1或者是离散的量,就需要从时间上对某一时刻上的数值进行采集,并使用数字量进行表示,使连续的量在时间上变成有限个小块。连续转换模式关闭时,转换完一轮后直接停止转换,等待下次启动,即单次转换模式。
2026-01-08 16:32:36
1639
原创 DMA_案例实践2:存储器到串口数据传输
可以发现,使用HAL库实现该案例,我们甚至不需要自己配置中断,大部分内容通过图形化配置后,都直接给我们实现了,后面我们进行测试时,我们只需要定义好发送的数据,然后调用串口DMA发送函数即可发送。到这里,其实HAL库就实现完毕了,大家若感觉太简单,可自行进入函数看看内部实现,其实就和我们寄存器实现逻辑比较类似,当然由于是供广大开发者使用的库函数,因此考虑因素会更加全面充分,因此显得复杂,而实际核心逻辑是差不多的,咱这里就不在赘述了。有了前面存储器到存储器的案例,这里实现存储器到串口应该有一定的思路了。
2026-01-07 15:03:03
986
原创 DMA_案例实战1:ROM到RAM数据搬运
需要注意的是,DMA中关于中断的寄存器没有专门再用其他结构体封装,也就是说还是原本的DMA1这种就能访问,同时中断的寄存器有两个,分别是用于读取指定中断状态的ISR寄存器和中断标志清除的IFCR寄存器。然后补充一下中断处理程序的内容。接着是DMA数据传输的实现,这里毕竟要进行数据传输,因此传输双方的地址肯定需要,即ROM和RAM的地址需要传参进入,其次还需要知道传输的数据量,所以传参还有数据长度。需要注意的是,由于一个DMA控制器包括多个通道,且各个通道的配置使用的寄存器配置都是一样的,因此这里。
2025-12-30 16:09:19
764
原创 DMA_基础知识、基本原理与相关寄存器详解
另一种方式是CPU知道当前DMA正在进行数据传输,不好直接打断,所以就先把总线控制器给DMA,由于外设与存储器访问时数据传给存储器或者外设后的读写也是存在一定的周期而非立马完成,这个过程总线上会有一定的空闲没有数据传输,这个时候DMA直接将总线控制权释放,同时CPU马上拿到总线控制权进行它的数据传输,然后DMA又要使用总线传输数据时CPU再释放给DMA使用,这样减少了时间的浪费,也避免CPU长时间的空等。根据寄存器描述可知,MEM2MEM置位表示启动存储器到存储器模式,清除表示非存储器到存储器模式。
2025-12-29 19:52:12
1339
原创 高级定时器_基本原理与案例实践
预分频系数和重装载值,这部分影响的是PWM波形的周期,由于我们需要生成2Hz即0.5s的波形,所以预分频尽可能大一些,笔者设置的为7200分频即7199,然后此时100us计数1次,然后0.5s就需要计数5000次,因此重装载值设置为4999即可。因此首先我们需要编写TIM1的初始化内容,主要编写生成PWM的逻辑和重复计数器功能配置。在过去的基本定时器和通用定时器中,计数器每溢出一次,就会产生1次更新事件,而在高级定时器中,计数器每溢出一次,还会产生一个信号,让旁边与之相连的重复次数计数器的值-1。
2025-12-28 21:00:12
943
原创 通用定时器_测量PWM方波的周期和占空比案例
前面介绍了触发信号、从模式以及PWM输入的相关基础知识,接下来我们就开始实战利用一下,来实现对输入的PWM方波的周期和占空比的测量。大家如果对触发信号、从模式这些还不太熟悉,可参见前面的博客如下:通用定时器_触发信号、从模式和PWM输入-优快云博客https://blog.youkuaiyun.com/2301_79475128/article/details/156339564?spm=1001.2014.3001.5501 我们先介绍一下利用从模式来实现时需要涉及的相关寄存器,前面说过,要实现占空比测
2025-12-28 12:47:32
691
原创 通用定时器_触发信号、从模式和PWM输入
本次我们选择第四类这种定时器自身通道1/2产生的信号作为触发输入信号,因为使用该触发输入信号恰好可以使用通道1和2分别检测上升沿和下降沿信号,然后作为触发输入,接着只要我们检测输入的下降沿信号就可以执行复位的行为,使得计数器清零,然后这时候就不需要我们手动利用中断然后去清零了。经过前面的介绍,我们理解了触发输入信号来源选择以及从模式的选择,这为测量PWM方波的占空比打下了一定的基础,但是我们还没有弄清楚具体要怎么去测量,只是说明白了要测量的话可以利用从模式来实现特定边沿信号自动复位计数器的效果。
2025-12-28 09:44:22
955
原创 基于STM32的交通灯控制系统
本项目是一个嵌入式系统开发实训项目,基于(STM32F10x 系列)微控制器,实现一个完整的十字路口交通灯控制系统。系统支持,具备红绿黄灯控制、双向倒计时数码管显示、黄灯闪烁、按键模式切换等功能。项目采用(不依赖标准库 HAL/LL),代码结构清晰、模块化,便于学习 STM32 底层寄存器操作。仿真环境为,实际硬件也可直接移植。
2025-12-23 19:55:43
1261
原创 嵌入式系统-实验三——串口通信实验
又因为显示在数码管上也就是点亮对应的LED,而两个数码管一共恰好16个LED,根据电路连接可知恰好使用了GPIOB的全部端口,因此只需要将这俩数值对应的8位字段码进行顺序拼接后写入GPIOB的所有端口位即可,具体就是把分离的两个数值作为数码管字段码数组索引得到的对应8位二进制,然后放在高8位写入的就左移8位并与另外8位二进制进行位或即可拼接完成,然后存在display_word中,最后使用GPIO_Write函数写入即可,代码如图8所示。其次是对串口功能进行配置。接着是数据回显与数据解析并显示。
2025-11-14 13:02:59
1483
原创 外设模块学习(12)——SW-520D倾斜传感器、SW-420震动传感器、声音传感器(三引脚)(STM32代码参考)
本文介绍了三种基于比较器电路的传感器模块:SW-520D倾斜传感器、SW-420震动传感器和CZN-15E声音传感器。文章详细说明了各传感器的工作原理、参数特性及使用方法,并提供了完整的STM32驱动代码(初始化、状态检测及主程序)
2025-11-01 14:06:34
2431
空空如也
软考中级嵌入式系统设计师证对后面工作的性价比
2024-12-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
4