
MCU开发查漏补缺
文章平均质量分 59
自己一直记不住的几个知识点,打算写在这里,比查纸质笔记方便多了
番茄灭世神
盖文章经国之大业,不朽之盛事
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何更改CubeIDE的字体大小
开门见山,CubeIDE整个软件都是基于eclipse的,所以这种操作完全互通。原创 2024-10-09 19:25:24 · 974 阅读 · 0 评论 -
利用软件IIC驱动外挂DAC芯片——Mcp4725
软件IIC就是移植得快,我试过很多次了这个能用。今天时间有限我就只贴代码了。原创 2024-09-23 17:22:49 · 699 阅读 · 0 评论 -
利用CubeMX复现正点原子TFTLCD驱动例程
①准备delay.c、delay.h、sys.c和sys.h四个文件。FMC的工作原理暂时先欠着,先记录一下CRUD的过程。这里我们使用的是BANK1 的第一个分区。点击 Configuration->FMC。②把fmc自动生成的代码注释掉一部分。配置参数如下图 17.5.1。③这个printf语句要屏蔽掉。选项卡之下配置相关参数。④整体代码,按需裁剪。原创 2024-09-12 16:27:18 · 1322 阅读 · 0 评论 -
利用STM32的定时器输出PWM方波
主要精力放在填写参数上,首先将预分频系数设置为7199,计数周期为4999,挂载在一个72Mhz的时钟线上,所以理论上一对高低电平组成的周期为0.5s。观察示波器波形,可以看到高低电平周期为500ms,其中300ms输出高电平,200ms输出低电平,和理论值相符合。然后是第二个关键点,选择时钟模式,时钟源选择Internal Clock,然后开启对应的通道并选择PWM生成模式。当然更多时候占空比需要可调,我来演示一下pluse占空比选择0,输出比较预装载寄存器需要使能,快速模式可以关闭,极性选择高。原创 2024-06-28 10:23:32 · 4101 阅读 · 0 评论 -
单片机开发中常用的C语言函数
原创 2024-08-27 00:13:41 · 168 阅读 · 0 评论 -
单片机大小端模式
大小端指的是在存储器中存储数据的字节顺序。C语言编程过程中,我们会定义各种类型的数据,比如8bit的char型,16bit的short型或者32bit的long型,在这个过程当中不可避免的会遇到多个字节排序的问题,为了解决这个问题大端存储模式和小端存储模式诞生了。大端模式,首先存储MSB字节,高字节存储在低地址;小端模式,首先存储LSB字节,低字节存储在低地址。ARM架构的芯片一般默认使用小端模式。这里我只是简单介绍在存储中的例子,事实上在一些通信协议,Modbus或者CAN协议之中,也存在着大小端传输。原创 2024-08-19 19:25:16 · 443 阅读 · 0 评论 -
利用软件定时器实现按键消抖
首先铺垫一个场景,研发需求是用户通过按下按键来和屏幕上的UI画面进行交互,这里我就以按下按键后按键值自增为例。我们定义了一个KeyCount计数值来统计按下按键的次数,如果我们在主进程之中检测按键连接的GPIO口的电平变化,毫无疑问按键计数值的自增会有延迟,因为While循环的执行需要机器时间。这时自然而然联想到中断检测IO口,但新的问题产生了,因为按键的机械触点在按下后会产生简谐振动,电平的变化会有一段毛刺。放任不管的话我们按下一次按键,可能计数值跳变了三次。原创 2024-08-12 17:30:32 · 1482 阅读 · 0 评论 -
嵌入式软开常用数据结构——环形缓冲区
环形缓冲区一种遵循FIFO(先进先出)的存储空间,它的主要特点是其终点和起点是相连的形成闭环。这种结构允许数据在达到缓冲区末尾时自动回绕到起始位置,从而实现数据的循环存储和管理。下图是一种形象理解。通俗地来讲,它也是一种线性表,由一个数组和两个表示读写状态的指针构成。在这个线性表被定义地第一时间,读指针与写指针指向同一个数组元素;当我们写入了一个数据之后,读指针会依旧指向第一个元素但写指针会按照写入方向依次指向下一个元素。如果写指针的下一个指向是读指针所在的元素,代表这个环形缓冲区已经写满。原创 2024-08-08 17:30:08 · 593 阅读 · 1 评论 -
一个关于STM32的DAC输出的遗忘点
但在这种情况下我们直接使用HAL_DAC_SetValue函数来配置通道输出模拟信号是无效的,因为既没有使GPIO引脚进入模拟输出状态,也没有开启外设通道,解决方法是添加这些代码。众所周知熟练使用HAL库可以帮你解决不少stm32的开发难题,但是是谁让你陷入了这些难题,别问。如上图所示,正常初始化这个模块后生成代码如下图所示;原创 2024-07-19 17:31:12 · 371 阅读 · 0 评论 -
江科大/韦东山SPI教程听课笔记
I2C开漏外加上拉电阻的硬件结构,限制了高电平的驱动能力,也就是说当SDA由低电平变为高电平时,往往需要耗费较多的时间。间接地限制了I2C的最大通信速度。标准I2C速度为100kHZ,高速I2C速度为400kHZ,改进后的极限值大概在3.4M左右。SPI相较于I2C而言速度通常会更快,直接取决于通信IC因为协议并没有严格规定最大传输速率。原理部分我打算听江科大的课复习一下,代码部分工作大概率用HAL库敲了。,它可以支持支持总线挂载多设备(原创 2024-07-16 21:35:41 · 362 阅读 · 0 评论 -
STM32的通用定时器中断编程
如果遇到需要单片机产生严格时序的场景(比如DAC输出特定模拟信号,GPIO口控制模拟开关),延时函数可能就无法胜任了。这里我设计了一个简单的实验,单片机开发板上有LED0和LED1,我们让LED0亮500ms之后熄灭,随后LED1亮100ms之后熄灭,以此循环。不过从波形上来看会有较大的误差,因为只有500ms的时序是用中断严格实现的。(5)在stm32f4xx_it.c的代码沙盒段内进行虚函数重写,并且定义所需全局变量。(3)跳转定义查看函数底层逻辑,找到中断回调函数。(7)主函数编写功能函数。原创 2024-06-17 13:27:12 · 1241 阅读 · 0 评论 -
下载Keil芯片包的方法
Keil里面弹出来的这个蓝色超链接,没梯子不要用edge浏览器。原创 2024-06-05 11:34:21 · 248 阅读 · 0 评论 -
按键配合LDO实现开关功能
核心任务就是通过按键控制LDO芯片的使能管脚的电平状态,这枚NCP芯片高电平使能,VBAT是来自USB(或者电池,下面省略说明)的5v供电,高电平使能EN引脚之后LDO输出3.3v。EN引脚平时被100kΩ电阻拉低,在D10导通时由3V_EN(GPIO口控制)拉高开始供电,当GPIO口输出低电平时LDO不供电。今天给大家分享一个学到的按键开关电路,适合没有足够空间给自锁开关的场景,既可以用于USB供电控制也可以用于电池供电控制。话不多说上电路图先。/*今年MSI怎么TES被GEN.G給2:0了?原创 2024-05-11 17:28:21 · 722 阅读 · 0 评论 -
MOS管搭配ADC实现电池电量的粗略估计
下面开始介绍软件构思,计划用ADC的轮询方式采集电池余量。步骤一:勾选对应的ADC管脚,其余保持默认(大家也可以根据实际情况调整ADC设置)后生成代码(注意分配给ADC的时钟频率尽量不要超频//32M)步骤二:初始化使能ADC,编写采集函数在生成的adc.c文件中编写采集函数//获得ADC值//ch: 通道值 0~16,取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_16//返回值:转换结果if(adcHandle->Instance==ADC1) //检查一下是否是ADC1。原创 2024-05-20 14:40:51 · 696 阅读 · 0 评论 -
Keil编程不同驱动文件引用同一个常量的处理方法
解决方法很多,例如放弃包含头文件,在驱动中extern常量等等。但是最规范的方法是使用C语言定义复用的规范:即在 C文件中定义,在头文件中extern声明,需要使用的地方引用这个头文件。我在头文件中定义了一个常量同时给两个驱动文件使用,封装的时候编译没问题,但是在main函数中引用驱动函数的时候就出现了重定义的问题,如下如所示。某些头文件内部定义了变量(比如屏幕字库),一般只由一个C文件引用的话问题不大,懂具体编译原理的大佬还请不吝赐教。基础不牢,地动山摇,最近单片机编程又遇到一个基础问题。原创 2024-05-14 17:04:43 · 591 阅读 · 0 评论 -
STM32用HAL库函数实现硬件IIC
这篇笔记我主要介绍代码实现,想要了解原理的请自己看视频,我不过多赘述了。原创 2024-04-26 17:10:48 · 4265 阅读 · 0 评论 -
stm32外部中断
基本功能实现了,但是还没按键消抖,从原理图上看我这个板子根本没滤波电容。所以这里调整一下滴答计时器中断和按键触发中断优先级顺序。今天先是改了个一直以来的认知错误,跑马灯不用电平反转需要两次delay,不然第二次翻转就出现问题了。算是白学了,哈哈哈哈。为了及时处理高优先级事件stm32引入了中断机制,这里我们做一个实验,按下按键之后让PC13小灯熄灭,平时保持常亮。从上往下依次是:上升沿触发中断、下降沿触发中断、电平上升下降都触发中断;我手上这块板子按下按键PB14捕获低电平,所以选择下降沿触发。原创 2024-04-25 17:23:28 · 316 阅读 · 0 评论 -
ARM单片机的GPIO口在控制不同LED、按键时的设置
GPIO口在驱动共阴极、共阳极LED灯时需要不同的初始化设置。个人备忘,不喜勿喷。原创 2024-04-09 17:31:25 · 333 阅读 · 0 评论 -
Keil MDK编辑工程文件时的步骤备忘
⑨右键单机Project框子里面这个带*的总文件夹,单击三个带颜色的方格/*Mange Projects Item*/⑦在工程文件夹里新建好“System”、“Hardware”这类文件夹/*这里以Hardware为例*//*如果有现成的ioc可以复制粘贴到一个同名空文件夹里面,版本问题可以选择migrate进行兼容*/在Folder Setup里面设置路径,点右边那三个点去找新建的文件夹/*隐私问题不截图了*/⑩点击Groups右边第一个按钮/*虚线画的矩形*///祝大家技术进步。原创 2024-01-22 17:30:01 · 575 阅读 · 0 评论 -
在stm32单片机上实现串口打印
串口调试是我们在开发单片机系统时常用的一种手段,我们可以通过重写stdio函数库中的printf函数实现这一点。大概就是这样了,如果有其他问题就检查一下串口号对不对,然后代开设别管理器看看转串口CH340驱动装没装。这次我使用CubeMX进行配置,编程IDE用的是keil,开发板是正点原子阿波罗。①把Target选项卡里的Use MircoLIB选项勾上。2.在project manger中生成keil工程。LED是笔者为了配合调试写了个点灯的程序,不必理会。②引用stdio头文件。1.开启usart2。原创 2024-01-18 11:13:12 · 1454 阅读 · 5 评论 -
STM32的定时器简介
STM32的定时器有关知识点原创 2024-01-17 11:33:04 · 668 阅读 · 0 评论