基于STM32的农业灾害监测系统软件设计

  • 格式:docx
  • 大小:463.67 KB
  • 文档页数:14

基于STM32的农业灾害监测系统软件设计4.1 程序流程图及开发环境搭建5-1 程序运行流程图4.2开发环境4.2.1 KEIL5 的介绍本系统编程用的是C语言,编程软件用的是KEIL5,在单片机编程中,较为主流的编程软件,它拥有流畅的用户界面和强大的仿真功能。

因为使用的传感器以及其他模块众多,因此把各个模块的功能与初始化都封装成了函数并分别存在了不同文档之中,这样不仅使得代码雅观整洁,而且调用的时候也十分方便。

子程序中包括DHT11温湿度模块、雨滴传感器、土壤湿度模块、光照强度模块和ESP8266WIFI模块等。

与之前的版本不同,KEIL 5分成MDK CORE和Soft和Software Packs两个部分。

MDK Core主要包括KEIL5 IDE集成开发环境和ARM Compiler5。

Software Packs则可以在不更换MDK Core的情况下,单独管理设备支持包和中间件更新包(即Device、CMSIS和Middleware)。

4.2.2 J-LINK 的连接与设置J-Link-OB是SEGGER开发的自主调试调试器下载器。

它通常是在大公司的评估板(“集成”)上设计的。

这就是为什么后缀是“OB”。

名为“J-Link-OB”的模拟下载调试器具有USB通信功能,能与PC通信。

另一端通过SWD / JTAG 模式与兼容设备通信,以执行调试任务。

,下载和调试。

所有内置微控制器系列如ARM7 \ 9 \ 11,Cortex-M0 \ M1 \ M2 \ M3 \ M4 \ A5 \ A8 \ A9与SWD接口均支持J-LINK。

关于J-LINK的使用,需要用杜邦线把J_Link 和开发板的 JTAG/SWD 连接起来。

如下图所示:图5-3 STM32F407VET6开发板相关引脚原理图图5-4 J-LINK相关引脚原理图PA13 、PA14的复用功能是和 J_Link里面的SWDIO和SWCLK 引脚是一样的。

然后PA13 PA14 接到 JTAG/SWD 的7 9 引脚。

也就是说。

J_Link里面的SWDIO 和SWCLK 用串口线和开发板的JTAG/SWD 的7 9 引脚直接相连。

高电平和接地可看JTAG原理图。

4.2.3 CH340G USB转串口自行开发系统USB-TTL / STC-ISP采用USB接口,解决了缺乏串口的问题,允许笔记本给单片机STC系列节目的用户的问题。

关于CH340G的使用,首先需要安装它的相关驱动:CH341SER.exe,图5-5 CH340G驱动安装驱动安装完成后,按照下面的接线图接好线即好:图5-6 接线图4.3 主要模块程序设计软件设计部分,包括两大部分:初始化和功能性设计。

4.3.1 系统初始化(1)时钟的初始化时钟是MCU的命令源和STM32具有三个不同的时钟源来驱动系统时钟:时钟振荡器HSI,时钟HSE振荡器和PLL时钟。

外部晶体HSE /谐振器:所述HSI 时钟信号由一个8 MHz的内部振荡器可以由2被用作分割后的PLL输入由两个时钟源产生的高速的外部时钟信号生成HSE陶瓷,外部用户时钟HSE。

我选择了PLL时钟。

主PLL乘以HSI时钟除以2或HSE乘以可配置分频器的PLL2时钟。

PLL2和PLL3通过可配置的分频器由HSE同步。

所述PLL(时钟源,分频器,乘法器等的选择)的配置必须在每个PLL的激活之前完成,并且一旦其输入时钟是稳定的。

启用PLL后,这些设置将不会更改。

更改输入PLL时钟源时,必须在选择新时钟源后禁用原始时钟源(通过时钟配置寄存器的PLLSRC位)(RCC_CFGR))。

当PLL准备就绪时,中断时钟寄存器(RCC_CIR)可以产生中断。

(2)初始化I / O.每个GPI端口/ O具有两个32位的配置寄存器(GPIOx_CRL,GPIOx_CRH),2个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),寄存器32个比特/复位(GPIOx_BSRR)和一个16位的复位寄存器(GPIOx_BRR)。

还有一个32位锁定寄存器(GPIOx_LCKR)。

浮动输入,输入/输出,输入/输出,模拟输入,漏极开路输出,推挽输出,推挽复用,开漏多路复用功能:每个GPIO端口位可单独在几种模式由软件进行设置。

每个端口位I / O可以自由编程,但端口的寄存器作为32位字(半字访问或字节不允许I / O应该可用)。

该GPIOx_BSRR和GPIOx_BRR寄存器允许读/编辑所有GPIO寄存器独立访问,有没有危险产生的读访问和修改之间的IRQ。

下图显示了I / O端口位的基本结构。

(3)串口初始化在这种设计中,收发器通过串口传输到STM32,其最基本的参数是波特率。

STM32串口必须打开串口时钟,设置相应的IO端口模式,并配置波特率,数据位长,奇偶校验等信息。

具体步骤如下。

串行时钟被激活。

串行端口用作STM32的器件,其时钟由器件时钟使能寄存器控制,串行端口1为APB2ENR寄存器的第14位。

除了激活APB2ENR中的串行端口1时钟外,其他串行端口的时钟使能位位于APB1ENR寄存器中。

串口复位。

当器件发生异常时,可以使用复位寄存器中的相应位设置复位器件,然后重新配置器件进行返工。

通常,当初始配置设备时,首先执行设备重置操作。

通过配置APB2RSTR寄存器的第14位来实现复位串行端口1。

设置串口波特率。

每个串行端口都有自己独立的波特率寄存器USART_BRR,它提供不同的波特率。

串口控制。

每个系列STM32端口的具有〜3.许多串行端口配置由这三个寄存器中定义的三个USART_CR1控制寄存器。

图4.3 USART_CR寄存器各位描述不使用该寄存器的高18位,低14位用于配置串行端口功能。

UE是串行端口使能位,通过它来启用串行端口。

M是用于选择字长的位。

如果该位为0,则串行端口设置为8个字加n个停止位。

停止位数(n)根据参数确定。

USART_CR2的位[13:12]。

默认值为0. PCE 是检查的启用位。

如果值为0,则禁用验证,否则启用验证。

PS是校验位的选择。

如果设置为0,则为偶校验,否则为奇校验。

TXIE是发送缓冲区的空白中断使能位。

将此位设置为1.当USART_SR的TXE位为1时,将产生串行端口中断。

TCIE是传输完成终止的激活位。

将此位设置为1.当USART_SR的TC位为1时,将产生串行端口中断。

RXNEIE 是接收缓冲区中非空中断的激活。

将此位设置为1.当USART_SR中的ORE或RXNE位为1时,将生成串行端口中断。

TE是发送使能位,如果没有1,则使能串口发送功能。

RE 是接收使能位,用法与TE相同。

数据的传输和接收。

STM32通过USART_DR数据寄存器发送和接收,USART_DR数据寄存器是一个包含TDR和RDR的双寄存器。

将数据写入该寄存器时,串行端口会自动发送,收到收据时,也会出现在该寄存器中。

该寄存器的每个位的描述如下所示:图4.4 USART_DR寄存器各位描述串口状态。

串口的状态可以通过状态寄存器USART_SR读取。

USART_SR的各位描述如下图所示:图4.5 USART_SR寄存器各位描述4.3.2功能性设计4.3.2.1 土壤湿度传感器,雨量传感器程序设计土壤湿度和雨量传感器都是用的模拟量采集,我们使用STM32F407VET6的ADC 采集口采集土壤湿度和雨量数据AD采集的程序设计:STM32F4XX系列的ADC都是12位的逐次趋近型模数转换器。

ADC(模数转换器)的位数决定了它的精度,ADC的位数分为8位、12位、16位,也就说它们精度范围是分别是0~256、0~4096、0~65536。

而它的转换范围是0~3.6V,当你需要把你采集的数据用电压来表示的话,假设你采集的数据为X(0~4096),那么此时你输出的电压为(X/4096)*3.6。

同时每个ADC有19个复用通道,可通道的信号,可以在4个不同的模以测量16个外部源、两个内部源和一个VBAT式下进行转换。

ADC的转换结果放在一个左对齐或者右对齐的16位的数据寄存器(注入数据寄存器和规则数据寄存器)中。

值得一提的是,ADC具有看门狗的功能,可以通过检测输入电压来判断是否超过设定的上下限值。

因为在大多数情况下,都是直接调用STM32F4XX芯片的库函数,因此这里重点介绍ADC采集的4个模式:单次转换模式、连续转换模式、扫描模式和不连续采样模式。

单次转换模式:在此模式下,ADC仅初始化转换。

要启动它,将ADC_CR2寄存器的ADON位置1(仅适用于普通通道)或将CONT设置为0以使用外部触发启动。

完成此选定频道的转换后,有两种情况:该通道首先是一个普通通道,然后转换后的数据存储在16位ADC_DR寄存器中,转换完成后,ADC_SR状态寄存器的EOC位被激活。

在此过程中,如果启用EOCIE,将生成中断。

第二,如果信道是一个喷射通道,转换后的数据被存储在ADC_DRJ1 16位寄存器,并且一旦转换完成的寄存器位JEOC ADC_SR条件将被激活。

如果设置了JEOCIE位,它将完成。

将产生中断。

(1)连续转换模式在此模式下,ADC将在完成转换后立即启动下一个新转换。

当ADC_CR2控制寄存器的CONT位被激活时,外部触发可以启动该模式;当ADC_CR2控制寄存器的SWSTRT位被激活时,该模式可以直接启动,但它适用于普通通道。

每个转换后,如果正常信道组被转换时,最后的转换后的数据被存储在寄存器16个ADC_DR比特和EOC是每次转换后设置为1,并且当EOCIE位被置位,产生一个中断。

(2)扫描模式该模式用于扫描一组模拟通道,并通过激活ADC_CR1寄存器中的SCAN位将其激活。

当使能扫描模式时,ADC会将所有选定的通道转换为ADC_SQRx(正常通道)或ADC_JSQR(注入通道)寄存器,并在每次转换后自动转换下一个通道。

如果设置了CONT,则当正常通道转换为最后一个通道时,转换将从第一个转换恢复。

一旦ADC_CR2状态寄存器的DMA位置1,ADC在每次转换后通过DMA DMA 将数据从正常通道组传输到SRAM,并将它们存储在ADC_DR寄存器。

当EOCS ADC_SR参数被设置为零时,注入通道的数据在当EOCS设定转换的每个正常序列的末端总是存储在寄存器ADC_JDRx,注入通道的数据总是每个正常频道转换结束。

存储在ADC_JDRx注册表中。

(3)批量采样模式该模式通过将ADC_CR1寄存器中的DISCEN位置1来激活该模式,这需要单独讨论规则数据和注入的输入。

规则组:该模式将包含作为所选转换序列一部分的n个转换的短序列转换为ADC_SQRx寄存器。

通过覆盖ADC_CR1寄存器中的DISCNUM位可以覆盖n的值。