RTOS | 实时操作系统杂谈

实时操作系统 (RTOS) 在工业控制、航空航天和电力系统中有大量应用。我自己接触实时操作系统已有几年时间,虽然实际的项目使用经验不多,然而耳濡目染还是积累了一些经验和知识。在这里整理和分享给大家。 实时操作系统(Real-time Operating System, RTOS)是针对有实时性要求的应用而设计的操作系统。这些应用通常包括汽车引擎控制、轨道交通、工业机器人、飞行器控制系统等。实时操作系统一般提供抢占式调度机制,重要的高优先级任务可以剥夺低优先级任务对CPU的使用权;同时,任务在等待 […]

Linux | Linux系统全方位调试与维护工具整理

俗话说:“工欲善其事,必先利其器。” 在多年维护和开发Linux服务器的过程中,我接触了一些常用的开发和调试工具。本文将这些工具整理在一起,便于指导读者选择正确的工具。文中对于工具只有简单的介绍,需要详细的用法可以–help或自行Google。 本文针对的环境是CentOS/RedHat服务器 (需要epel库)。其他发行版应该也有相应的命令,但我没有一一测试。 系统管理 ssh: 远程登录 last, lastlog: 查看用户登录历史 cron: 设置周期运行的定时任务 at: 设置运行一 […]

STM32 | STM32F4开始你的Discovery

拿到STM32F4 Discovery已经很长时间了,最近想用它做一些数字信号处理的实验,今天花些时间熟悉了其基本的使用用法,写此教程共勉之。 STM32 Discovery的相关资料可以在官网上获得:www.st.com/stm32f4-discovery,这里我们以官方的演示工程Demonstration为例,介绍其工程配置与程序下载方法,该工程实际上就是Discovery出厂时的默认代码。 一、下载代码包 在官网上下载库函数以及示例代码”STSW-STM32068″ […]

STM32 | UID(全球唯一ID)介绍与应用

每个STM32芯片在出厂时都具有一个全球唯一的芯片ID(UID),该ID为96位,其存储地址分布如下: Start Address : 0x1FFF F7E8 Address offset: 0x00 U_ID(00-31) Address offset: 0x04 U_ID(32-63) Address offset: 0x08 U_ID(64-96) 该ID的应用领域(引用自Datasheet): ●用来作为序列号(例如USB字符序列号或者其他的终端应用) ●用来作为密码,在编写闪存时,将此 […]

STM32 | 串口初始化发送0xFE的Bug

最近在使用STM32F103串口功能时,发现第一个发出的串口数据帧总是不能被正确识别,在监听串口的原始报文后,我发现原来是数据帧前面多了一个0xFE。在经过一些尝试性的程序调整之后,我发现这个问题竟然和串口时钟初始化所在的位置有关。 这是存在问题的初始化程序: 这是修改后工作正常的代码: 这两者唯一的区别在于后者将串口时钟初始化放在了GPIO引脚初始化之前! 我现在还没有办法解释这种情况发生的原因,但是我推测是一些隐晦的时序问题导致串口数据线上产生了一个错误的数据,我还将进一步跟踪这个问题。(文 […]

STM32 | STM32的低功耗设计

在谈到低功耗处理器时,我们第一个想到的总是MSP430,但其实STM32也能拥有不错的低功耗特性。通过合理的进行软件设置,STM32在工作时的功耗可以降至数十mA,而待机功耗可以降到数uA。总的来说,降低STM32功耗的方法主要有以下三种: 1. 关闭不需要的外设时钟 STM32的所有外设都可以独立开启和关断,通过将不需要的AHB/APB的时钟关闭,可以起到降低总待机功耗的作用。各个模块的典型功耗如下所示: Figure 1. APB1外设的典型功耗 Figure 2. APB2外设的典型功耗 […]

STM32 | STM32F4 Discovery开发板简介

不久之前在淘宝上购买了一块STM32F4-Discovery开发板,根据自己的使用情况以及官方提供的说明手册,撰写了这篇关于该开发板的初步介绍,以供初学者参考。 Figure 1. F4-Discovery外观与包装 F4-Discovery是ST公司推出的官方开发套件,从开发板板载的资源来看,该开发板在设计上着重突出了F4的数字信号处理能力。其板载的芯片有1片STM32F407VGT6,1个三轴MEMS,1个音频MEMS,以及1片音频DAC。在接口上,其有一个miniUSB接口(用于供电及调试 […]

串行Flash芯片w25x16使用心得

这一段时间因项目需要使用了Winbond公司的w25x16/w25x32串行Flash存储芯片,对Flash芯片的使用方法略有心得,现整理成文。 在Flash中存储数据与在EEPROM中存储数据不同,不仅需要考虑数据的存储结构,还需要针对Flash独有的特性进行特殊处理。其中最显著的不同点在于Flash在编程前,必须保证待写入区域全部为空(0xFF),否则无法正常执行写入操作;并且Flash在操作时一般需要按数据区域(Section)进行操作,而并非字节。 串行Flash的主要特性有(以w25x […]

挑战低功耗7小时纪实

今天,我的一位同事在低功耗设计上遇到了麻烦,他所设计的一个电池供电的设备不到几天就将电池消耗殆尽。经过测量,我发现这个设备的待机功耗过大,达到6.6mA,经核算,按照该功耗,即使设备一直处于休眠状态也只能工作2天。 按照低功耗设计的一般分析方法,可以从硬件和软件两个方面减小设备的功耗。 首先,我怀疑是所用的一些模块功耗较大,于是我把一些可插拔的模块断开,但是功耗没有明显下降,可见功耗损失不来自这些部分。 之后,我仔细核对了他的原理图,我发现了几个可能导致功耗较大的问题: 1、有一些不必要的上拉电 […]