分类: 单片机

单片机(Single-Chip Microcomputer)/微控制器(Microprocessor Control Unit, MCU)

17 篇文章

在ThreadX中使用low_power低功耗(ARM)
在单片机系统运行过程中,大部分时间均处于空闲状态,为了减小功耗,可以让ThreadX管理在空闲时进入低功耗模式。在utility\low_power文件夹有关于这个模块使用的详细说明。 移植说明 这个工具位于utility\low_power文件夹下,使用时将这个文件夹下的源文件添加进工程,C/C++的包含路径也添加这个文件夹。ThreadX可用的配置有TX_LOW_POWER_TIMER_SETUP和TX_LOW_POWER_TICKLESS,这两个选项组合能产生三种配置(不使能TX_LOW_…
在ThreadX中使用execution_profile(运行概要)工具(ARM)
在ThreadX中官方提供了execution_profile工具,这个工具能够统计ThreadX在线程、中断、空闲时的时间。通过这些时间,我们可以推算出CPU的利用率。 移植说明 这个工具位于utility\execution_profile_kit文件夹下,使用时将这个文件夹下的源文件添加进工程,C/C++的包含路径也添加这个文件夹。使用这个工具需要实现TX_EXECUTION_TIME_SOURCE和TX_EXECUTION_MAX_TIME_SOURCE两个宏定义,分别为该工具使用的时钟…
在ThreadX中屏蔽中断使用BASEPRI而不是PRIMASK(ARM)
Arm中的中断开关方法 对于中断开关的实现,可以使用PRIMASK(只响应NMI和Hardfault)、FAULTMASK(只响应NMI)、BASEPRI(定义被屏蔽优先级的阈值,比BASEPRI优先级高的中断才可响应) 让ThreadX使用BASEPRI(ThreadX 6.2.1,低版本可能不支持) ThreadX提供的模板默认使用PRIMASK来开关中断,可以使用tx_user.h中添加宏 #define TX_PORT_USE_BASEPRI \\ 使用BASEPRI #define T…
ThreadX移植STM32H7指南
ThreadX与STM32H7相关资源 ThreadX官方文档ThreadX代码仓库STM32Cube MCU包 ThreadX移植 以下基于STM32H7的基本模板(已经移植HAL) 将ThreadX源文件添加进工程中(MDK为例) 在ThreadX代码仓库中下载ThreadX,下载好的ThreadX(6.2.1)有以下文件夹 . ├── cmake # CMake,用于构建工程,使用MDK时可删除 ├── common # ThreadX ├── common_modules # Threa…
W25Qxx SPI Flash使用中的若干问题
W25Qxxjv系列最高频率可以达到133MHz,并且支持QPI的使用,但在移植时遇到了很多无语的问题。 复位 在使用过程中发现,上电不会导致Flash复位,也就是说Flash既可能在SPI模式也可能在QPI模式,需要在两个模式下都发送一个复位使能和复位指令Enable Reset (66h) and Reset Device (99h),复位后,Flash默认在SPI模式下。 SPI和QPI 在使用QPI之前,需要将状态寄存器2(Status Register-2)中的QE(Quad Enab…
ARM内核IMPRECISERR硬件异常
今天在调试代码时,发现注释掉某些初始化部分就会导致HardFault,查看相关寄存器发现是BusFault的IMPRECISERR引起的,在ARM的手册中是这么描述这个东西的: a data bus error has occurred, but the return address in the stack frame is not related to the instruction that caused the error. When the processor sets this bi…
ARM单片机中断的各类问题
引子 还记得在给WS2812B写驱动时,最开始采用的方式是使用DMA向定时器传输数据以满足WS2812B单极性归零码的传输要求,但是实际运行时却发现第一个灯珠的颜色出现了异常,当时真的耽搁了很久,最后也没有找出来是为什么,现在我想就很可能是在配置DMA时发生了中断引起了许多不可控的因素。 中断概述 简单来说,中断及其外围部件包含了中断向量表(用于储存中断的入口地址),NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器,用于控制中断使能、优先级等…