MCU是怎样输出PWM波形的?

在电力电子控制中,PWM几乎是无处不在的,不论是AC/DC,DC/AC,还是DC/DC,都涉及到PWM,PWM具体是什么可以自行百度,网上资料非常多,这里就不再赘述。在电力电子变换里面,PWM波形生成有两种方式,模拟和数字,专用的模拟IC不在此文探讨范围之内,本文主要介绍怎样用MCU来生成PWM。

在所有的MCU里,都会有Timer定时器,PWM就是通过这个外设生成的,基本的原理可以通过下图(以STM32F407的寄存器为例)来解释。

 MCU是怎样输出PWM波形的?

计数器TIM_CNT对输入时钟进行计数,比如输入时钟是1MHz(50%占空比方波),对时钟的每一个上升沿(或者下降沿)从数字0开始计数,计数到TIM_ARR=999,一共计数1000个,经历的时间是1000*1/1000000 = 1ms,也就是1kHz,计数到999之后计数器TIM_CNT归零,重新从0开始计数到999,往复循环,这样就形成了1kHz PWM了。

耦合与退耦,上拉与下拉

耦合与退耦

什么是耦合电容?什么是去耦电路?

耦合指信号由第一级向第二级传递的过程,一般不加注明时往往是指交流耦合。

退耦是指对电源采取进一步的滤波措施,去除两级间信号通过电源互相干扰的影响。耦合常数是指耦合电容值与第二级输入阻抗值乘积对应的时间常数。

退耦有三个目的:

【视频】赛普拉斯学院之PSoC 6基础系列课程(二)

欢迎观看PSoC 6基础系列课程短视频,此系列视频将介绍如何采用PSoC 6微控制器开发低功耗嵌入式物联网解决方案,视频课程总共40集,本视频为第二集。

ARM汇编指令(1)——跳转指令

ARM处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令6大指令。

一、跳转指令

跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转。

Ⅰ.使用专门的跳转指令;

Ⅱ.直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用。

ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令:

1、B指令

B指令的格式为:

B{条件} 目标地址

【下载】PIC32系列参考手册——图形 LCD (GLCD)控制器

图形 LCD (Graphics LCD, GLCD)控制器设计为与显示屏接口,使用内置模拟驱动来单独控制屏幕的像素。GLCD 控制器可传输来自存储设备的显示数据,并对这些数据进行格式化以用于显示设备。引脚上的并行接口以标准 3.3V 输出工作,它需要 28 个引脚来支持 24 位颜色,并且通常与器件上的通用 I/O 功能共用。

32位低功耗MCU的设计

作者: 新唐科技

1、前言

意法半导体传感器通过阿里IoT验证,助力设备厂商更快推出新产品

意法半导体宣布其LSM6DSL 6轴惯性传感和LPS22HB压力传感器通过阿里IoT(物联网)生态系统验证,让用户能够在更短的时间内研制出IoT节点和网关整体解决方案。

关于STM32空闲中断

在使用串口接受字符串时,可以使用空闲中断(IDLEIE置1,即可使能空闲中断),这样在接收完一个字符串,进入空闲状态时(IDLE置1)便会激发一个空闲中断。在中断处理函数,我们可以解析这个字符串。

需要注意的是,IDLE标志位需要软件清零,否则由于会不断进入中断,而使正常程序无法运行。当再次收到数据时(即RXNE再次置1),等到空闲便会重新进入中断。

x86和arm架构原子操作的区别

x86和arm在原子操作上有些差别,下面一代码的形式来说明区别:

首先比较单核:

由于x86是CISC指令集,允许在一条指令里进行两次内存操作,所以对i++,i__这些操作在单核条件下是原子,当然必须得是显示使用addl r,%1这种,就可在一条指令里完成读,写操作。

MCU上的无锁原子读操作

原子读操作是在MCU并发编程中常用的操作,简单举个例子来阐述问题:

我们使用RTOS或裸机状态编程时,必然需要一个全局时钟基准,通常是在一个定时器中断中累加实现,简化代码如下:

static unsigned long volatile __jiffies = 0; /* 全局时钟基准节拍累加器 */