第2章 智能家居系统总体结构的设计
(3) 传感器模块的无线网络。本文中的控制家居照明系统以及一氧化碳传感器信息的传输都是通过连接WiFi网路进行通信,来达到智能家居系统无线传输的要求。
智能家居控制系统无线WiFiPC机智能手机报警模块一氧化碳传感器模块继电器开关模块用户图2-1智能家居系统的总体结构
2.4 主控芯片STM32介绍
2.4.1 STM32的内核简介
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex—M3内核。Cortex—M3 是一个32位的处理器内核。内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的。CM3采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指和数据访问并行不悖[12]。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性,CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一个方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。也就是说,不是因为有指令总线和数据总线两条总线,而使寻址空间扩大一倍。
9
燕山大学里仁学院本科毕业设计(论文)
Cortex—M3处理器拥有R0—R15的寄存器组。其中R13作为堆栈指针SP。SP有两个,但在同一时刻只能有一个可以看到,就是所谓的“banked”寄存器。R0—R12都是32位的通用寄存器,用于数据操作,绝大数的16位的Thumb指令只能访问R0—R7,而32位Thumb-2指令可以访问所有的寄存器。PSP进程堆栈指针,有用户的应用程序代码使用。R14连接寄存器,ARM为了减小访问内存的次数(访问内存的操作往往需要3个以上指令周期,带MMU和cache的不确定),把返回地址直接存储在寄存器中。这样使喝多只有1级子程序调用的代码无需访问堆栈内存,提高了程序调用的效率。R15是程序计数器,因为CM3内部使用了指令流水线,读PC时返回的值是当前指令的地址+4[12]。
2.4.2 中断管理
Cortex—M3在内核上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断。其中编号1-15的是系统异常,大于等于16的是外部中断,除了个别异常的优先级被定死外,其他中断的优先级都是可编程的。当系统正在执行一个更高优先级的异常服务例程时,低优先级的中断将会被悬起。对于每个中断源,在被悬起的情况下,都会对应一个“悬起状态寄存器”保存其异常请求,直到该异常能够执行为止。
NVIC(嵌入式中断控制)中有一个寄存器是“应用程序中断及复位控制寄存器”,它里面有一个位段名为“优先级组”。该位段的值对么一个优先级可配置单异常都有影响—把其优先级分为个位段:MSB所在的位段(左边的)对应抢占优先级,而LSB所在的位段(右边的)对应亚优先级。
抢占优先级决定了抢占行为:当系统正在响应某异常L时,如果来了抢占优先级更高的异常H,则H可以抢占L。亚优先级的则处理中断;当抢占优先级相同的异常有不止一个悬起时,就优先响应亚优先级最高的异常。
中断配置的基础:使能与除能寄存器,悬起与解悬寄存器,优先级寄存器,活动状态寄存器,异常掩蔽寄存器,向量表偏移量寄存器,软件触发中断寄存器,优先级分组位段。
中断的使能与除能分别使用各自的寄存器控制——这与传统的使用单
10
第2章 智能家居系统总体结构的设计
一比特的两个状态来表达使能与除能是不同的。CM3可以由2240对使能位/除能位,每个中断有一对。使能一个中断,写1到SETENA的位,除能一个中断,写1到对应的CLRENA位。如果在该位中写0,不会有任何效果。
如果中断发生时,正在处理同级或高优先级异常,或者被掩蔽,则中断不能得到立即响应。此时中断被悬起。中断的悬起状态可以通过“中断设置悬起寄存器(SETPEND)”和“中断悬起清除寄存器(CLRPEND)”来读取,也可以手工悬起中断。每个外部中断都有一个活动状态位,在处理器执行了其ISR的第一条指令后,它的活动位就被只1,并且直到ISR返回时才硬件清零[13]。
中断建立的过程:
(1) 当系统启动后,先设置优先组寄存器。在缺省的情况下使用组0(7位抢占优先级,1位亚优先级),STM32中只是用了低四位。
(2) 如果需要重定位向量表,先把硬fault和NMI服务例程的入口地址写入到新表所在的地址。
(3) 配置向量表偏移量寄存器,使之指向新的向量表(若需要重定位)。 (4) 为该中断建立中断向量。因为向量表可能已经重定位了,保险起见需要先读取向量表偏移量寄存器的值,再根据该中断在表中的位置,计算出服务例程入口地址应写入表。
(5) 为中断设置抢占优先级和亚优先级。 (6) 使能该中断。
2.4.3 系统的滴答定时器
SysTick定时器嵌在NVIC中,用于产生SYSTICK异常(异常号15),以前大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统,或者把每个定时器周期的某个时间范围内赐予特定的任务等,还有操作系统提供的各种定时功能,需要一个定时器来产生周期性的中断以维持操作系统“心跳”的节律[13]。
SysTick定时器除了能服务操作系统外,还可以用于其它目的:做为一
11
燕山大学里仁学院本科毕业设计(论文)
个闹铃,用于测量时间。
2.4.4 电源控制
STM32的工作电压为2.0V到—3.6V,通过内置的电压调节器提供所需的1.8V电源。当主电源掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器提供电源。为了提高转换的精确度,ADC使用一个独立的电源供电,过滤和屏蔽来自印刷电路板的毛刺干扰。
使用电池或其他电源连接到VBAT脚上,当Vdd断电后,可以保存备份寄存器的内容和维持RTC的功能。VBAT脚也为RTC、LSE振荡器和PC15至PC15,这保证当主要电源被切断时RTC能继续工作。切换到VBAT供电由复位模块中的掉电复位功能控制。如果应用中没有使用外部电池VBAT必须连接到Vdd引脚上。
复位后调节器总是使能的。根据应用方式它以3中不同的模式工作。 (1) 运转模式:调节器以正常功耗模式提供1.8V电源。
(2) 停止模式:调节器以低功耗模式提供1.8V电源,以保存寄存器和SRAM的内容。
(3) 待机模式:调节器停止供电。除了备用电路和备份域外,寄存器和 SRAM的内容全部丢失。
在系统或电源复位后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低功耗i模式来节省功耗。STM32F10xxx有三种低功耗模式:
(1) 睡眠模式(Cortex—M3内核停止,所有外设Cortex—M3 核心的外设,如NVIC、系统时钟等仍在运行)。
(2) 停止模式(所有的时钟都已停止)。 (3) 待机模式(1.8V电源关闭)。
在运行模式,可以通过以下的方式降低功耗:降低系统时钟,关APB和AHB总线上未被使用的外设时钟。
RTC可以在不需要依赖外部中断的情况下唤醒低功耗模式下的微控制器(自动唤醒模式)。RTC提供一个可编程的时间基数,用于周期性从停止或
12
第2章 智能家居系统总体结构的设计
待机模式下唤醒。通过对备份区域控制寄存器的RTCSEL[1:0]位的编程,三个,三个RTC时钟源中的二哥时钟源可以选作实现此功能。
(1) 低功耗32.768KHz外部晶振(LSE)。
该时钟源提供了一个低功耗且精确的时间基准(典型功耗小于1uA)。 (2) 低功耗内部RC振荡器(LSI RC)。 器将少许增加电源消耗。
下操作:配置外部中断线17为上升沿触发并且配置RTC使其可产生RTC闹钟事件。如果从待机模式中唤醒,不必配置外部中断线17[13]。
使用该时钟源,节省了一个32.768KHz晶振的成本。但是RC振荡
为了RTC闹钟闹钟事件将系统从停止模式下唤醒必须,必须进行如
2.4.5 时钟
三种不同的时钟源可被用来驱动系统时钟(SYSCLK): HIS振荡器时钟, HSE振荡器时钟,PLL时钟,40KHz低速内部RC,可以用来驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/待机模式下自动唤醒系统。32.768KHz低速外部晶体也可用来通过程序选择驱动RTC。
当不被使用时,任一个时钟源都可独立的启动火关闭,以优化系统的功耗[13]。
2.4.6 通用和复用功能IO
每个GPIO端口有两个32位配置寄存器(GPIOX_CRL/GPIOX_CRH),两个32位数据寄存器,两个32位的数据寄存器(GPIOX_IDR和GPIOX_ODR),一个置位/复位寄存器(GPIOX_BSRR),一个16位复位寄存器(GPIOX_BRR)和一个32位的锁定寄存器(GPIOX_LCKR)。GPIO端口的每个位都可以由软件分别配置为以下模式:输入浮空,输入下拉,输入上拉,模拟输入,开漏输出,推挽式输出,推挽式复用功能,开漏功能。
每个IO端口可以自由编程,然而IO端口寄存器必须按32位字被访问。GPIOX_BSRR和GPIOX_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问,这样在读和更改之间产生IRQ时不会发生危险。所有端口都有外部中断能力,为了使用外部中断线,端口必须配置成输入模式。使用默认
13