跳转到主要内容

技术

单片机软件定时器的使用方法

作者:zhangren_ham

初学者在编写单片机程序时经常会用到延时函数,但是当系统逐步复杂以后(没有复杂到使用操作系统)延时会因为延时降低MCU的利用率,更严重的会影响系统中的“并行”操作例如一个既有按键又有蜂鸣器的系统中,如果要求按下按键发出不同的声音,每次发声时间在1秒-2秒之间, 如果用延时来做代码很简单:

Proteus仿真软件在单片机设计中的应用

摘要:单片机应用技术所涉及到的实验实践环节比较多,而且硬件投入比较大。在具体的工程实践中,如果因为方案有误而进行相应的开发设计,会浪费较多的时间和经费。Proteus仿真软件很好的解决了这些问题,它可以象Protel一样画好硬件原理图与KEIL编程软件结合进行编程仿真调试。

IAR程序下载与运行方式

<strong>(一)程序固化后运行方式:</strong>

程序开始运行后需要将RW 和ZI段搬移到RAM中去,程序下载进Flash中以后,上电后是怎样将RW ZI断搬移到RAM中去的?注意IAR和ADS在进行完.s文件的初始化以后都不是直接跳转到main函数去执行,IAR是跳转到?main中而ADS是跳转到__main函数中,在这些函数中根据icf文件的配置,将RW和ZI段搬移到icf文件规定的RAM区域中。

如果程序的运行时域是在片外RAM中,那程序是在什么时候对片外RAM控制器进行初始化呢?

因为.s文件的开始部分是CODE ROM的,不需要RAM空间,所以可以在.s文件中对片外RAM进行配置。

IAR集成开发环境如何设置堆栈大小

GCC和IAR分配堆栈的方式不同,IAR先分配堆栈空间,相当于定义一个全局数组为堆栈空间,堆栈初始为堆栈空间最高地址;GCC不用先分配堆栈,自动把RAM剩余空间作为堆栈空间,堆栈初始为RAM最高地址。
 
初学者很容易忽视这个问题,造成程序跑飞而找不到问题的症结,我在用IAR For MSP430的时候没遇到过这个问题,因为MSP430的RAM比较大,IAR默认是80字节,足够一般程序使用。 

但是使用IAR For SAM8的时候,有一个比较耗费堆栈的程序运行一段时间后出问题,由于要记录一个24小时的数组,而数组元素的值是在堆栈里改变的,所以,记录到一定时间以后,出现了堆栈不足的情况,初学者如果没有仿真器,是很难发现这个问题的,还好我用的仿真器在Debug的时候出现了堆栈不足的警告,我才意识到是这里问题。 

Cortex-M0处理器的故障处理和功耗管理

<strong>一、故障处理</strong>

故障是异常的一个子集,见第2-19页的异常处理模型。在NMI或HardFault异常处理时发生的故障将会引起HardFault异常或导致锁定(Lockup)。故障包含:•执行一条SVC指令,该指令的优先级高于或等于SVCall。•缺少调试器连接时,执行BKPT指令。

• 在加载或存储数据时,系统产生总线错误。

• 执行XN存储区的指令。

• 执行来自系统已产生总线故障的地址位置的指令。

• 取向量时系统产生总线错误。

• 执行一条未定义的指令。

• T位已清为0,处理器不在Thumb状态时执行指令。

• 试图读取或保存数据到未对齐的地址。

浅析单片机ROM、RAM和FLASH的作用

常规上ROM是用来存储固化程序的,RAM是用来存放数据的。由于FLASH ROM比普通的ROM读写速度快,擦写方便,一般用来存储用户程序和需要永久保存的数据。譬如说,现在家用的电子式电度表,它的内核是一款单片机,该单片机的程序就是存放在ROM里的。电度表在工作过程中,是要运算数据的,要采集电压和电流,并根据电压和电流计算出电度来。电压和电流时一个适时的数据,用户不关心,它只是用来计算电度用,计算完后该次采集的数据就用完了,然后再采集下一次,因此这些值就没必要永久存储,就把它放在RAM里边。然而计算完的电度,是需要永久保存的,单片机会定时或者在停电的瞬间将电度数存入到FLASH里。

ROM存放指令代码和一些固定数值,程序运行后不可改动;RAM用于程序运行中数据的随机存取,掉电后数据消失..

单片机C程序编译、执行过程

<strong> 1、编写C代码:</strong>

1)预编译代码

2)定义及声明变量

3)定义及声明函数

4)编写程序代码(主函数MAIN)

<strong> 2、编译器编译:</strong>

1) 预处理

此时编译器会扫描一个一个的C源文件,如果发现#include了某个.h文件,则把整个.h文件包含进.c文件中,形成一个新的.c文件(实际的实现过程可能不是这样,但原理是这样的)。同时进行相关预处理指令的解释工作,譬如将宏替换成实际的值。

2) 编译源文件

Cortex-M0处理器的异常处理模型

本节主要介绍Cortex-M0的异常处理模型。

<strong>1、异常的状态</strong>

每个异常都处于以下状态之一:

<strong>未激活(Inactive) </strong>

异常没有被激活也没有被挂起。

<strong>挂起(Pending) </strong>

异常正等待被处理器服务。

来自外设或软件的中断请求,能让相应中断变为挂起状态。

<strong>激活(Active)</strong>

异常正在被处理器服务,并且服务尚未结束。

注意:一个异常处理能中断另一个异常处理,在这种情况下,两个异常都处于激活态。

MCU产品测试要领

<strong> 一.MCU测试</strong>

1.mcu工作电压及电流

测试MCU工作电压是否在工作电压范围,电压过高会影响MCU的正常工作甚至烧坏,工作电压过低会影响MCU的外围电路驱动能力,甚至导致外围电路不能正常工作。

2. mcu静态电流

静态电流是衡量MCU性能的主要参数之一,静态电流越小越好,根据MCU规格书测试静态电流是否符合要求,一旦MCU有损坏的话,静态电流就会变大,会增加产品的静耗,致使产品整体功耗增加。

3.mcu的振荡频率

如MCU为外接晶振型的,需要检测其正常工作时MCU的晶振输入脚的振荡频率是否正确,如果晶振振荡频率不符合要求则会影响产品的定时及延时,甚至不能正常工作。

单片机嵌入式编程的五个注意事项

在单片机编程的过程中,如果一名设计者能够同时掌握多门编程语言,那么这名设计者肯定是一位非常优秀的人才。但是想要同时精通汇编、C语言、C++这三门语言实在是太难了,很多初学者在其中一门的学习中就已经到处碰壁,苦不堪言。本文特意为大家整理了拥有嵌入式编程领域多年工作经验的工程师意见,汇总成了一篇能够对嵌入式编程经验有着指导意义的注意事项,感兴趣的朋友快来看一看吧。

在单片机嵌入式编程中,最难的两部分是interrupt和MM(memorymanage),之所以有人觉得并不困难,那是因为太多数情况下芯片制造商都已经直接写好,但是如果设计者本身就在为芯片制造商工作,那就必须自己会写配置文件。

如何快速掌握一款新的MCU?

任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数量、指令系统等。对于指令系统,虽然形式上看似千差万别,但实际上只是符号的不同,其所代表的含义、所要完成的功能和寻址方式基本上是类似的。因此,对于任何一款MCU,主要应从如下的几个方面来理解和掌握:

<strong><font size="5">MCU的特点</font></strong>

要了解一款MCU,首先需要知道就是其ROM空间、RAM空间、IO口数量、定时器数量和定时方式、所提供的外围功能模块(Peripheral Circuit)、中断源、工作电压及功耗等等。

如何发挥ARM Cortex-M3和M4微控制器最大作用?

<strong><font size="5">引言</font></strong>
  许多嵌入式开发人员对ARM Cortex处理器架构颇为熟悉,但很少有人能够对这种流行架构了如指掌,从而可以充分发挥它独特的特性和性能。新型ARM Cortex-M4处理器尤为如此,它拥有引以为豪的增强架构、天生的数字信号处理(DSP)能力和可选的浮点加速器,使精于此道的程序设计人员或硬件工程师可以充分发挥它的优势。本文接下来将就Cortex-M3/M4微控制器(MCU)的一些更有趣的(但经常遭到忽视的)特性展开详细的论述。
  

Cortex-M0处理器的存储模型

本文将描述Cortex-M0设备的内存映射和内存访问行为。该处理器有一个固定的存储映射,它可以提供高达4GB的可寻址内存。存储映射图如下:

<center><img src="http://mm32.eetrend.com/files/2016-08/wen_zhang_/100002417-7659-1.jpg&q…; alt=""></center>

如何从零开始利用ARM微控制器相应资源

<strong>1 – 总览</strong>

对于一个 ARM 微控制器的初学者来说,有时候要找到一些有用的设计参考信息是非常困难的一件事。因为在网上实在有太多资源了,最先遇到的困难可能就是能不能找到一个地方帮助你正确选择一款 ARM 的处理器 ,目前,主要有两种 ARM 处理器:

应用处理器 Application processors – 这些都是能跑操作系统的,比如 Linux 呀, Windows RT 啥的。典型应用就是智能手机,移动计算设备甚至服务器。 推荐用 ARM Cortex-A 系列处理器

IAR for arm 中断处理写法

<strong> 方法1:</strong>

启动文件中:(默认启动文件也是这样)

org 0x18
ldr pc,[pc,#-0xFF0] ; 直接跳转到用户中断处理函数

直接写用户中断函数
__irq __arm void Tmr0_IntOnMR0_isr(void)
{
............
}

__irq __arm void Tmr1_IntOnMR0_isr(void)
{
............
}

<strong> 方法2:</strong>

启动文件中:(默认启动文件也是这样)

微处理器的低功耗芯片设计技术详解

随着半导体工艺的飞速发展和芯片工作频率的提高,芯片的功耗迅速增加,而功耗增加又将导致芯片发热量的增大和可靠性的下降。因此,功耗已经成为深亚微米集成电路设计中的一个重要考虑因素。为了使产品更具竞争力,工业界对芯片设计的要求已从单纯追求高性能、小面积转为对性能、面积、功耗的综合要求。而微处理器作为数字系统的核心部件,其低功耗设计对降低整个系统的功耗具有重要的意义。
  
本文首先介绍了微处理器的功耗来源,重点介绍了常用的低功耗设计技术,并对今后低功耗微处理器设计的研究方向进行了展望。
  
<strong><font size="5">1、微处理器的功耗来源</font></strong>
  

仅有一字之差的微控制器与微处理器,其实区别还挺大!

中央处理器是一块超大规模的集成电路,是一台计算机的运算核心和控制核心,它的功能主要是解释计算机指令以及处理计算机软件中的数据。主要包括运算器和高速缓冲存储器及实现它们之间联系的数据、控制及状态的总线。它与内部存储器和输入/输出设备合称为电子计算机三大核心部件。

<center><img src="http://www.eetrend.com/files-eetrend/forum/201607/100064362-82087-1.png…; alt=""></center>

《ARM Cortex-M3权威指南》笔记

<strong><font size="5">第1章 介绍</font></strong>

<strong>一、ARM Cortex‐M3处理器初探 </strong>

CM3处理器内核是单片机的中央处理单元(CPU)。完整的基于CM3的MCU还需要很多其它组件。在芯片制造商得到CM3处理器内核的使用授权后,它们就可以把CM3内核用在自己的硅片设计中,添加存储器,外设,I/O以及其它功能块。不同厂家设计出的单片机会有不同的配置,包括存储器容量、类型、外设等都各具特色。本书主讲处理器内核本身。如果想要了解某个具体型号的处理器,还需查阅相关厂家提供的文档。

ARM嵌入式常用开发工具及开发流程(插画版)

由于嵌入式开发环境的特殊性(交叉编译),我们会用到一些其他的外围工具,这里做简要的说明。并重新介绍一下整个开发环境中,各个工具的使用,及一个简单应用的开发流程。

<strong> SecureCRT : 串口输出显示工具、SSHclient 。</strong>

SecureCRT 是一款支持SSH(SSH1和SSH2)的终端仿真程序,同时支持Telnet和rlogin协议。

这个是最有用的吧,你看到她就会爱上她。并且是可以窗口内多标签,界面和蔼可亲的。

<strong> DNW : USB下载工具。(配合u-boot使用)</strong>

Cortex-M0处理器的编程模型

本节描述Cortex-M0编程模型。除了内核的各个寄存器之外,还包含处理器操作模式和堆栈的介绍。

<strong>1、处理器工作模式</strong>

处理器工作模式有:

<strong>Thrread模式</strong>

用于执行应用程序,在处理器复位时,进入Thread模式。

<strong>Handler模式</strong>

用于异常处理,处理器执行完所有异常程序后,返回到Thread模式。

<strong>2、堆栈</strong>