按键通常有:IO口按键(BUTTON),AD按键(通过AD采样电压),IR(遥控器)
按按键功能分:有短按键,长按键,连续按键。打个比方,遥控电视机,按一下音量键,音量增加1,这个就是短按键。按住音量键不放,音量连续加,这个就是连续按键。按住一个按键5s,系统会复位,这个是长按键。
<strong>1、IO口按键,</strong>就是我们比较常见的一个IO接一个按键,或者是一个矩阵键盘。很多新人的处理方法可能是采样延时的方法,当年我也是这样的,如下:
if(GETIO==low)
{
delay_10ms()
if(GETIO==low)
{
//得到按键值
}
}
概述
MM32F031 使用高性能的 ARM® Cortex®-M0 32 位的 RISC 内核,最高工作频率 48MHz,内置高速存储器,丰富的增强 I/O 端口和联接到两条 APB 总线的外设。所有型号的器件都包含 1 个 12 位的 ADC、5 个通用 16 位定时器、1 个高级 PWM 定时器,还包含标准和先进的通信接口:1 个 I2C 接口和 SPI 接口、1 个UART 接口。
MM32F031 产品供电电压为 2.5V 至 5.5V,包含-40°C 至+85°C 温度范围和 -40°C 至+105°C 的扩展温度范围。一系列的省电模式保证低功耗应用的要求。
“分层思想”并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用。看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种恍然大悟的感觉。如果说我不懂LCD怎么驱动,那好办,看一下datasheet,参考一下别人的程序,很快就可以做出来。但是如果不懂程序设计的思想的话,会给你做项目的过程中带来很多很多的困惑。
很多学习电子电路设计的朋友都会涉及到单片机的开发,网络上有很多关于单片学习开发的资料,但是这些资料当中或多或少都会涉及一些比较专业的名词和概念,电路设计初学者看不明白,学习起来也比较困难,本篇文章就对单片机开发过程中所要涉及到的几个概念进行介绍,希望能对新手有所帮助。
<strong> 1、什么是DSP中的“内部上拉”和“内部下拉”?</strong>
DSP中介绍引脚时,注明PU,PD说是“内部上拉”和“内部下拉”,就是说内部已经配置了接电源的上拉电阻或是接地的下拉电阻。这样,当作为输入端口连接OC或COMS芯片或浮空时。信号线平是确定的高/低电平。而不是不确定的浮地电平。内部上拉,相当于输入和电源之间接了一个几十K的电阻;下拉,相当于用电阻和地相连。
作者:NK_test
通过采用C#语言实现的上位机控制单片机的步进电机模块、LED灯和蜂鸣器模块,使步进电机进行正、反转和停止并控制转速;LED灯模块进行有选择的呼吸式表达;蜂鸣器模块的开始和终止。
上位机通过串口和自定义的通信协议(8字节)控制单片机的步进电机、LED灯和蜂鸣器模块。其中在控制步进电机的过程中,为了使操作能够及时响应,使用了INT0中断来进行及时性速度响应;LED灯使用位运算控制灯的闪烁位置,合理利用了单片机的模块和操作。
注意:由于定时器个数的限制,没能控制更多的模块。
#include<reg52.h>
sbit WEI=P2^7;
sbit DUAN=P2^6;
#define DataPort P0
<strong><font size="5">概述</font></strong>
MM32F103 使用高性能的 ARM® Cortex®-M3 32 位的 RISC 内核,最高工作频率 96MHz,内置高速存储器,丰富的增强 I/O 端口和联接到两条 APB 总线的外设。所有型号的器件都包含 2 个 12 位的 ADC、2个 12 位的 DAC、2 个电压比较器、3 个通用 16 位定时器和 1 个 PWM 高级定时器,还包含标准和先进的通信接口:2 个 I2C 接口和 SPI 接口、3 个 UART 接口、一个 USB 接口和一个 CAN 接口。
本文主要从M3和M4的MPU、DSP能力、debug调试和电源管理4个方面说明两者的区别。
<strong><font size="5">1、内存保护单元MPU </font></strong>
与Cortex - M3的相同,MPU是一个Cortex - M4中用于内存保护的可选组件。处理器支持标准ARMv7内存保护系统结构模型。您可以使用在MPU执行 特权/访问 规则,或者独立的进程。这个MPU提供全面支持:
<li>保护区</li>
<li>重叠保护区域,提升区域优先级(7 =最高优先级,0 =最低优先级)</li>
<li>访问权限</li>
<strong>1基本原则</strong>
质量是关键。没有人会对很差的工作感到满足。当完成高质量的工作时,你会为此而感到骄傲。不管你是否知道,你都会因为你的高质量工作而得到信誉。因此,要想为自己所做的事感到骄傲,就需要建立个人标准,并为达到这一标准而努力奋斗。在达到这些标准时,再提高标准并继续努力。挑战自己去完成更优良的工作,你将会为自己的成就而感到惊讶。
<strong>1.1 了解单片机的能力</strong>
【规则1】设计满足要求的最精简的系统。
Cortex-M3是一个32位处理器内核。内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的。CM3采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性,CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。换句话说,不是因为有两条总线,可寻址空间就变成8GB了。
比较复杂的应用可能需要更多的存储系统功能,为此CM3提供一个可选的MPU,而且在需要的情况下也可以使用外部的cache。另外在CM3中,Both小端模式和大端模式都是支持的。
可编程SOC器件不但可作为电机控制、模拟测量以及直接驱动LCD显示屏的统一电路板系统用于电动自行车应用,而且还能支持电容式感应技术以取代键盘上的机械按键。此外,SOC器件还能利用内部PWM、MUX和比较器来驱动和控制三相电机,利用内部ADC和PGA来支持传感器输入电池监控,以及利用热敏电阻或RTD等温度感应器件来实现温度感应。该器件不但能直接驱动继电器,以支持刹车灯、车头灯和转向灯,而且能直接驱动LCD显示屏,以显示温度、电池状态、速度、骑行距离及各种错误/警告消息等。
<strong><font size="5">第1章 介绍</font></strong>
<strong>一、ARM Cortex‐M3处理器初探 </strong>
CM3处理器内核是单片机的中央处理单元(CPU)。完整的基于CM3的MCU还需要很多其它组件。在芯片制造商得到CM3处理器内核的使用授权后,它们就可以把CM3内核用在自己的硅片设计中,添加存储器,外设,I/O以及其它功能块。不同厂家设计出的单片机会有不同的配置,包括存储器容量、类型、外设等都各具特色。本书主讲处理器内核本身。如果想要了解某个具体型号的处理器,还需查阅相关厂家提供的文档。
<strong>Thumb指令</strong>
Thumb指令集可以看作是ARM指令压缩形式的子集,它是为减小代码量而提出的,具有16位的代码密度。Thumb指令体系不完整,只支持通用功能。必要时仍需要使用ARM指令,如进入异常时。
说明:Thumb指令的格式与使用方式与ARM指令集类似,而且使用并不是很频繁,建议这部分内容选修。
<strong>简单的Thumb程序</strong>
调试嵌入式软件是我最不喜欢的行为,不幸地是,它却是必要的。值得庆幸地是,技术和工具链创新的进步衍生出大量的新技术,从而大大地加快了调试过程。下面让我们来看看其中一些方法,从传统的断点调试出发到更先进的仪器跟踪技术。
<strong><font size="5">技巧1# - 传统的断点调试</font></strong>
每个开发人员都熟悉传统的调试技术,设置断点、执行代码,然后单步调试代码进行监视,同时监视寄存器和变量值。断点调试是我看到的使用最多的技术。然而,结果却不甚乐观,因为断点调试的效率较低,通常会产生次优的结果。
到现在为止,相信大家对单片机已经有了一个基本概念,但是我们为什么要学习单片机呢?我们需要找到爱上单片机的一万个理由。
<strong> 单片机在实际中的应用</strong>
单片机在生活中应用非常广泛。各种家电,如洗衣机,电冰箱,电饭煲,电子称,等等,往往会称自己的产品是高科技、全自动、微电脑控制的智能产品……对于没有接触过单片机之类器件的人来说,会感觉真的是很难想象的高科技。而当你学会单片机之后,你的想法就完全不一样了。你可能只是淡淡一笑,然后暗暗的想,人家用的什么单片机?怎么写的程序?要不改天也来自制一个类似的玩玩?当然我并不否认单片机是高科技,我这里也不是有意要冒犯家电厂商,请大家理解o(╯□╰)o。
<strong>Thumb-2指令集</strong>
同时支持16位和32位指令系统
Bit[15:11]
0b11101
0b11110
0b11111 紧邻的两个半字构成一条32位指令
其他:皆为16位指令
调试,在企业程序设计里(我把企业商务类型的软件开发叫企业程序设计,把单片机与驱动程序这样接触底层汇编与硬件相关的程序设计叫底层程序设计),调试一般都用来跟踪变量的赋值过程,以及查看内存堆栈的内容,查看这些内容的目的在于观察变量的赋值过程与赋值情况从而达到调试的目的。由于企业程序的宿主就是开发它的计算机本身,因此企业程序设计比起底层程序设计,特别是单片机的程序设计调试来的更直观,调试也更方便。
本文将详细为大家介绍并讲解ARM的指令集。
比如:
ADC :带进位的加法
(Addition with Carry)
ADC{条件}{S} <dest>, <op 1>,<op 2>
dest = op_1 + op_2 + carry
ADC 将把两个操作数加起来,并把结果放置到目的寄存器中。它使用一个进位标志位,这样就可以做比 32 位大的加法。下列例子将加两个 128 位的数。
128 位结果:寄存器 0、1、2、和 3
第一个 128 位数: 寄存器 4、5、6、和 7
第二个 128 位:寄存器 8、9、10、和 11。
ARM公司的Cortex-M0应用于各种微控制器(MCU)中,并可让研发工程师以8位的价位创造32位的的效能,并将传统的8位和16位的处理器升级到更高效、更低功耗的32位处理器。
Cortex-M0是Cortex-M家族中的M0系列。最大特点是低功耗的设计。Cortex-M0为32位、3级流水线RISC处理器,其核心仍为冯.诺依曼结构,是指令和数据共享同一总线的架构。作为新一代的处理器,Cortex-M0的设计进行了许多的改革与创新,如系统存储器地址映像(system address map)、改善效率并增强确定性的嵌套向量中断系统(NVIC)与不可屏蔽中断(NMI)、全新的硬件除错单元等等,都带给了使用者全新的体验和更便利、 更有效率的操作。
;先在RAM 中分配系统使用的栈,RAM 的起始地址为0x2000_0000
;然后在RAM 中分配变量使用的堆
;然后在CODE 区(flash)分配中断向量表,flash 的起始地址为0x0800_0000,该中断向量表就从这个起始地址开始分配
;分配完成后,再定义和实现相应的中断函数,
;所有的中断函数全部带有[weak]特性,即弱定义,如果编译器发现在别处文件中定义了同名函数,在链接时用别处的地址进行链接。
;中断函数仅仅实现了Reset_Handler,其他要么是死循环,要么仅仅定义了函数名称
;STM32 被设置为从内部FLASH 启动时(这也是最常见的一种情况),当STM32 遇到复位信号后,CPU-M3 会自动
Cortex‐M3 是一个32 位处理器内核。内部的数据是32 位的,寄存器是32 位的,存储器接口也是32 位的。
CM3 采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行。这样一来数据访问不再占用指令总线,从而提升了性能。
<strong> 内容提要</strong>
<li>寄存器组</li>
<li>异常和中断</li>
<li>操作模式和特权极别</li>
<li>存储器映射</li>
<li>总线接口</li>
<li>指令集</li>





