嵌入式开发
文章平均质量分 92
foxclever
览绝胜于巅峰,漱心神以涤尘;觅悠然而思远,垂江海以渔闲
展开
-
使用微控制器精确测量电流
某些应用,如电力电子、安全系统和气体监测器,可能需要测量电路中流动的电流。虽然使用模数转换器(ADC)测量电压是一个简单的过程,但测量电流则不是。电流测量的复杂性增加,增加了测量误差的几率。这篇博文将讨论其中一些误差源,以及如何使用片上模拟内核独立外设(CIP)来减少或消除这些误差。翻译 2023-02-19 11:30:19 · 1195 阅读 · 0 评论 -
如何确保不使用动态内存
许多应用程序不需要动态内存分配和使用。为了防止使用 malloc()和 free(),最好删除链接器文件中的任何堆定义,以导致链接器错误。那么 GNU 链接器交叉引用表或图像信息可能非常有用。翻译 2022-12-18 08:48:55 · 502 阅读 · 0 评论 -
外设驱动库开发笔记40:AT25xxx外部存储器驱动
我们在前面开发过AT24CXX系列EEPROM存储器,它使用的是I2C接口。不过有时候我们也会使用SPI接口的EEPROM存储器。在这一篇我们将来讨论AT25XXX系列EEPROM存储器的驱动设计、实现及使用。1、功能概述 AT25XXX系列EEPROM存储器采用SPI接口,因其操作简单且性价比高,常用于数据保存。出于开发面向AT25XXX系列EEPROM存储器操作的驱动目标,我们先来了解一下AT25XXX系列EEPROM存储器的基本情况。1.1、硬件描述 AT25XXX系列EEPROM存储原创 2022-04-05 14:32:47 · 2064 阅读 · 2 评论 -
快速实现一个室内空气质量检测仪
冬天我们大多会关闭门窗,而依靠暖通空调设备来维持室内温度。而在保证居室温度的同时,我们也希望保持居室内大气环境的健康度。鉴于此,我们设计了一个简单的室内空气质量检测器。原创 2021-12-11 19:37:49 · 5001 阅读 · 0 评论 -
一个简单的空气质量数据监测站项目
大气质量数据监测站用于测试空气质量监测及数据采集,实现野外或者室内空气质量的检测。并通过网络将数据上传到OneNet显示。1、项目概述本项目是一个定制项目,要求采集大气的压力、温度、湿度、PM25、位置等数据并上传到指定的后台服务器。但有时候因为没有条件或因为各种原因不能联网,则采用本地保存的方式,本地保存我们决定使用SD卡来实现。除此外,为了实现显式需求,还需要配套一些东西来实现隐式的需求,如实时时钟记录,上传联网方式的选择等。2、硬件设计本项目涉及到的硬件并不复杂,我们对其中几个实用原创 2020-11-29 20:19:39 · 758 阅读 · 0 评论 -
STM32F0使用LL库实现SHT70通讯
在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片。这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现。本篇我们将基于LL库采用模拟I2C接口的方式实现温湿度采集。1、SHT70简述SHT70是一款集温湿度测量于一体的传感器,现在对其作简要介绍。其引脚定义如下:SHT7X温湿度传感器使用的2线通讯,类似于I2C总线,但并不相同,...原创 2019-03-16 22:13:35 · 1099 阅读 · 0 评论 -
STM32与多台MS5803压力传感器I2C通讯
MS5803压力传感器支持SPI和I2C总线通讯,拥有24位AD转换。能够同时获得压力值和温度值,其中压力测量范围为10-1100mbar,温度的测量范围是-40-85摄氏度。各引脚功能及参数如下:传感器内部结构图如下:通讯协议的选择通过PS引脚来设置: PS引脚电位 通讯模式 使用的引脚 高电平 ...原创 2019-03-11 09:33:14 · 3499 阅读 · 2 评论 -
FreeRTOS如何结束和重新启动调度程序
大多数主机或桌面系统(比如Linux,Mac或Windows)都有一个正常的用例,你可以在早上启动操作系统,然后在晚上关闭它,然后你就离开机器。嵌入式系统是不同的:他们没有参加,他们应该“永远”运行。并非每个嵌入式系统都需要运行操作系统(或者在那个世界中:实时操作系统或RTOS),但这同样适用于:在RTOS启动后,并不意味着它将关闭并重新启动。在某种程度上,他们根本不支持“关闭”和“重启”功能。如...翻译 2019-02-16 20:18:00 · 8163 阅读 · 0 评论 -
STM32与宇电设备实现AI-BUS通讯
宇电的设备使用基于RS-485的自定义协议,协议本身比较简单,只有2条指令:读:地址代号+52H(82) +要读的参数代号+0+0+校验码写:地址代号+43H(67)+要写的参数代号+写入数低字节+写入数高字节+校验码校验码采用 16 位求和校验方式,其中读指令的校验码计算方法为:要读参数的代号×256+82+ADDR。写指令的校验码计算方法为以下公式做 16 位二进制加法计算得出...原创 2019-01-26 21:36:07 · 1183 阅读 · 0 评论 -
STM32F0使用LL库实现PWM输出
在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片。这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现。本文我们将说明如何通过LL库实现PWM信号的输出。1、概述我们知道STM32的TIM计时器可以输出PWM信号,这测我们也采用STM32F030F4中的TIM3通用计时器来实现我们想要的功能。TIM3通用计时器由一个16位的自动重新加载...原创 2019-03-22 22:03:45 · 3686 阅读 · 1 评论 -
STM32F0使用LL库实现Modbus通讯
在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片。这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现。本篇将说明基于LL实现USART通讯。1、概述我们想要实现基于RS485的Modbus通讯实际就是基于USART的通讯。USART使用可编程波特率发生器提供非常广泛的波特率范围。根据不同配置可以实现我们不同的串行通讯应用需求。其结构图...原创 2019-03-31 21:21:04 · 2564 阅读 · 0 评论 -
STM32基于SPI和AD7192的数据采集
在开发臭氧发生器的时,我们需要一个高分辨率的AD采集,于是选择了AD7192,选择这款ADC的原因比较简单。首先它是24位的符合我们的精度要求;其次它自带时钟,便于节省空间;第三它有4路单端或2路差分输入,与我们需要三路采集相符。1、AD7192简介AD7192是一款适合高精密测量应用的低噪声完整模拟前端,内置一个低噪声、 24 位Σ-Δ型模数转换器 (ADC)。片内低噪声增益级意味着可直...原创 2019-04-12 22:07:02 · 7385 阅读 · 5 评论 -
STM32基于AD5663的UV灯电压控制
在开发臭氧发生器的时,我们使用UV灯来实现臭氧的产生。而UV灯的强度决定了臭氧产生的浓度,UV灯的光强则与其控制电压密切相关。所以我们要控制产生的臭氧的浓度就需要调节其控制电压。我们选择了AD5663这一模拟量输出模块来实现这一点。1、AD5663简介AD5663属于nanoDAC系列,是低功耗、双通道、16位缓冲电压输出数模转换器(DAC),采用2.7V至5.5V单电源供电。AD5663...原创 2019-05-10 21:46:43 · 2331 阅读 · 1 评论 -
STM32利用光敏二极管实现光度测量
最近我们在开发臭氧发生器时,需要监测生成的臭氧的浓度,于是想到使用光度计来测量。因为不同浓度的臭氧对管的吸收作用是不相同的,于是检测光照强度的变化就可以得到相应的浓度数据。1、硬件设计此次光照度检测我们选用了S1336-5BQ光电点二极管,其光谱响应范围为:190~1100nm范围。而我们的光源波长则在254nm最显著,包括其它600nm以内的光波,这个好处于测量范围之内。根据相关的资...原创 2019-06-07 06:56:58 · 6063 阅读 · 2 评论 -
STM32的ADC通道间干扰的问题
最近我们在开发一个项目时,用到了MCU自带的ADC,在调试过程中发现通道之间村在相互干扰的问题。以前其实也用过好几次,但要求都不高所以没有太关注,此次因为物理量的量程较大,所以看到了变化。首先来说明一下此次的软硬件环境,MCU采用的是STM32F103VET6,ADC采用自带的ADC1,使用通道6和7。在软件方面,我们使用版本为1.4的HAL库,使用DMA方式采集。接下来,我们描述一下现象...原创 2019-06-13 21:30:33 · 11977 阅读 · 0 评论 -
如何优化代码和RAM大小
如果供应商为我自己的项目提供了一个起点,那就太好了。工作'blinky'始终是一个伟大的首发。方便总是有代价,而且“blinky”就是夸大“切换GPIO引脚”的代码大小。对于具有少量RAM和FLASH的设备,这可能会引起关注:如果'blinky'占用那么多,我的应用程序是否适合该设备?不要担心:可以轻松地修剪掉(或任何其他项目)。恩智浦LPC845-BRK主板上的Binky我在这里使用...翻译 2019-09-08 17:38:14 · 1241 阅读 · 1 评论 -
STM32与MS5837压力传感器的I2C通讯
MS5837压力传感器是一种可用于电路板上,适用于检测10-1200mbar压力范围的传感器,灵敏度非常高,理论上能够检测到0.01mbar的压力变化,实际使用过程中测试并无明显的变化。MS5837采用I2C总线通讯,与STM32的MCU可以实现I2C通讯。硬件连接方式如下:MS5837只有5个基本命令:复位、读取出厂校准值、数据1转换(压力值数据)、数据2转换(温度值数据)和读取AD...原创 2019-01-09 22:06:48 · 9032 阅读 · 91 评论 -
STM32F0使用LL库实现DMA方式AD采集
在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片。这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现。在本文中我们将介绍基于LL库的ADC的DMA采集方式。1、概述这次我们使用DMA方式实现对AD的采集,在遗忘我们使用HAL库和标准库都做过,这次我们使用LL库来实现。接下来我们简单了解一下STM32F030F4中的ADC和DMA。...原创 2019-01-18 21:01:39 · 4654 阅读 · 2 评论 -
STM32F0使用LL库实现MS5536C通讯
在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片。这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现。在本文中我们说明一下,使用LL库实现MS5536C的SPI通讯。1、MS5536C简述MS5536C是一个系列的高分辨率工厂校准压力传感器。该设备包括一个压阻式压力传感器和一个ADC,采用三线SPI接口。该设备以16位数据字的形式提供...原创 2019-01-11 21:16:10 · 1281 阅读 · 1 评论 -
使用EmBitz开发STM32项目开发环境配置
一、EmBitz软件获取与安装1、EmBitz软件的获取EmBitz原名Em::Blocks,是基于Code::Blocks开发的,面向嵌入式的C/C++集成开发环境。支持J-Link和ST-Link调试器。使用J-Link仿真器时需安装J-Link GDB Server。EmBitz下载地址:http://www.emblocks.org/web/downloads-m...原创 2016-07-04 17:46:16 · 5520 阅读 · 0 评论 -
通过数组和枚举简化GPIO操作编码
在工作中,经常遇到大量使用GPIO作为数字量输入输出来控制设备或采集状态,每次定义操作不同的GPIO针脚既麻烦又容易出错,于是就想要简化操作过程。对于数字量输入来说就是采集对应针脚的状态;而输出则是根据逻辑关系置位或复位对应得针脚。为了使用方便,我们按可复用和经常变化的部分叫软件的实现划分为2个部分。相对固定的部分我们封装成操作函数供调用,对于经常变化的部分(如硬件配置等)我们原创 2016-08-23 16:42:57 · 1390 阅读 · 0 评论 -
添加串口和虚拟终端输出帮助调试
在使用IAR开发STM32项目时,使用串口或者是虚拟终端来输出我们想看的信息是一个非常好而且简便的方式。首先来看看串口怎么实现信息输出。简单来说串口输出信息就是将标准输出重定向到串口,在上位机的超级终端或者串口助手等工具中查看结果。在使用串口之前要配置串口,这一点是串口应用的基本知识,如果要通过串口输入参数可能还需要使用中断。关于串口配置和终端配置,应根据具体是用来实现原创 2016-10-28 16:52:35 · 1834 阅读 · 0 评论 -
STM32F412应用开发笔记之二:基本GPIO控制
NUCLEO-F412ZG板子上的元器件并没有完全焊接,除去ST-LINK部分和电源部分后,还有用一个USB主机接口,三个LED灯和两个按钮,不过很多功能引脚都已经引到了插针。查看原理图可发现,由原理图模块的5大部分与电源部分组成,即连接端子、ST-LINK、MCU、USB、以太网和电源部分。电源部分考虑的非常充分,5V有三路输入,一路是有外部输入6-15VDC电源经U原创 2016-12-13 11:31:07 · 4673 阅读 · 0 评论 -
STM32学习及应用笔记一:SysTick定时器学习及应用
这几年一直使用STM32的MCU,对ARM内核的SysTick计时器也经常使用,但几乎没有仔细了解过。最近正好要在移植一个新的操作系统时接触到了这块,据比较深入的了解了一下。1、SysTick究竟是什么?关于SysTick在STM32的资料中并没有详细的介绍,这可能由于SysTick是ARM内核的东西。在《STM32F10xxx参考手册》、《STM32F4xx参考手册》以及《STM...原创 2016-12-18 18:54:46 · 1812 阅读 · 0 评论 -
在多任务(RTOS)环境中使用看门狗
最近在SEGGER的博客上看到一篇有关在实时操作系统使用看门狗的文章。从一个失败的太空项目出发,分析了看门狗的作用及使用,自我感觉很有启发,特此翻译此文并推荐给各位同仁。为了阅读方便,有些航天领域名词本人添加了注释,读者也可自行搜索更详细的解释。当然限于个人水平,有不当之处恳请指正。大家也可以看原文:https://blog.segger.com/using-a-watchdog-...翻译 2018-06-26 20:53:44 · 5484 阅读 · 1 评论 -
基于ARM Cortex-M和Eclipse的SWO单总线输出
最近在MCU on Eclipse网站上看到Erich Styger所写的一篇有关通过SWD的跟踪接口SWO获取ARM Cortex-M相关信息的文章,文章结构明晰,讲解透彻,本人深受启发,特意将其翻译过来供各位同仁参考。当然限于个人水平,有不当之处恳请指正。原文网址:https://mcuoneclipse.com/2016/10/17/tutorial-using-single...翻译 2018-07-03 09:20:25 · 1549 阅读 · 0 评论 -
通过printf从目标板到调试器的输出
最近在SEGGER的博客上看到Johannes Lask写的一篇关于在调试时使用printf函数从目标MCU输出信息到调试器的文章,自我感觉很有启发,特此翻译此文并推荐给各位同仁。当然限于个人水平,有不当之处恳请指正。原文网址:https://blog.segger.com/getting-printf-output-from-target-to-debugger/ Erich Styge...翻译 2018-07-18 13:42:05 · 587 阅读 · 0 评论 -
使用Eclipse进行Makefile项目
最近在MCU on Eclipse网站上看到Erich Styger所写的一篇有关在Eclipse中使用Makefile创建项目的文章,文章讲解清晰明了非常不错,所以呢没人将其翻译过来供各位同仁参考。当然限于个人水平,有不当之处恳请指正。原文网址:https://mcuoneclipse.com/2017/07/22/tutorial-makefile-projects-with-eclipse/...翻译 2018-07-26 09:48:40 · 13043 阅读 · 1 评论 -
使用FreeRTOS进行性能和运行时分析
在MCU on Eclipse网站上看到Erich Styger在2月25日发的博文,一篇关于使用FreeRTOS进行性能和运行分析的文章,本人觉得很有启发,特将其翻译过来以备参考。当然限于个人水平,有描述不当之处恳请指正。原文网址:https://mcuoneclipse.com/2018/02/25/performance-and-runtime-analysis-with-freertos/...翻译 2018-08-03 21:11:09 · 3511 阅读 · 0 评论 -
在Amazon FreeRTOS V10中使用运行时统计信息
在MCU on Eclipse网站上看到Erich Styger在8月2日发的博文,一篇关于在Amazon FreeRTOS V10中使用运行时统计信息的文章,本人觉得很有启发,特将其翻译过来以备参考。原文网址:https://mcuoneclipse.com/2018/08/02/tutorial-using-runtime-statistics-with-amazon-freertos-v10...翻译 2018-08-11 14:53:35 · 1434 阅读 · 0 评论 -
μCUnit,微控制器的单元测试框架
在MCU on Eclipse网站上看到Erich Styger在8月26日发布的博文,一篇关于微控制器单元测试的文章,有很高的参考价值,特将其翻译过来以备学习。原文网址:https://mcuoneclipse.com/2018/08/26/tutorial-%CE%BCcunit-a-unit-test-framework-for-microcontrollers/ 单元测试是主机开发...翻译 2018-09-02 10:35:48 · 941 阅读 · 0 评论 -
在Eclipse中使用Git
本文原文出自MCU on Eclipse网站,作者为Erich Styger,原文网址:https://mcuoneclipse.com/2018/09/30/tutorial-git-with-eclipse/。本人翻译了此篇文章,有些短语难以找到准确表达的中文词语,所以保持了原文。限于个人的知识局限性,如有不当之处欢迎交流。 软件开发领域有一些改变游戏规则的事情:当我开始使用VCS(版...翻译 2018-10-13 21:43:07 · 754 阅读 · 0 评论 -
基于STM32L476的锂电池SOC检测
便携式设备由于使用需求而配备了锂电池,但使用过程中需要掌握电源的状态才能保证设备正常运行。而且在电池充放电的过程中,监控电池的充放电状态也是保证设备安全的需要。1、硬件设计电池SOC检测是一个难题,有很多的模型和检测电路。但对于我们这样一台很小的便携式一起来说,使用各类检测模型和电路无论成本还是周期都不允许,所以只能想别的办法。我们使用一个采样电路采集电压信号,形成以个0-2.5V的差...原创 2018-12-08 20:10:45 · 6229 阅读 · 4 评论 -
STM32与SHT1X温湿度传感器通讯
在这次项目开发中应用到了SHT1X温湿度传感器,该系列有SHT10、SHT11和SHT15,属于Sersirion温湿度传感器家族中的贴片封装系列。包括一个电容性聚合体测湿敏感元件、一个用能隙材料制成的测温元件,传感器内部有一个精度高达14为位的A/D转换器。更详细资料请参考说明书。1、硬件介绍现在对本次使用的SHT15作简要介绍。其引脚定义如下: 引脚 名...原创 2018-12-30 20:08:24 · 3645 阅读 · 0 评论 -
在emIDE中创建STM32项目
emIDE是一个开源的嵌入式集成开发环境,基于Code::Blocks开发,能够支持多个平台和多个厂家的嵌入式硬件,继承了Code::Blocks的有点。下载emIDE并安装,也可选择绿色版。若需要调试则需安装J-Link GDB Server。1、打开emIDE在File菜单选择“New File/Project”,创建一个新项目,如下图:原创 2016-06-27 16:41:50 · 3243 阅读 · 0 评论