Advertisement

物联网智慧教室项目(二):智慧教室项目驱动开发

阅读量:

一、环境监控驱动开发

在这里插入图片描述

外设驱动开发流程

Created with Raphaël 2.3.0 原理图分析 数据手册分析 外设配置

(一)时钟&SWD配置

原理图分析

时钟原理图

如下图所示,STM32F407外部高速晶振为25MHz,分别连接到PH0和PH1引脚!
在这里插入图片描述

SWD原理图

如下图所示,STM32F407仿真接口SWD分别连接到PA13和PA14引脚!
在这里插入图片描述

外设配置

时钟外设配置
使能时钟源
  1. 选择RCC外设
  2. 选择高速时钟为外部时钟源
  3. PH0和PH1引脚自动高亮
    在这里插入图片描述
配置时钟树
  1. 锁相环时钟源为25MHz外部高速时钟
  2. 高速时钟分频系数配置为25,输出为1MHz
  3. 倍频系数配置为336
  4. 分频系数配置为2,输出为168MHz
  5. 系统时钟源选择PLL
  6. APB1配置为4分频,为42MHz
  7. APB2配置为2分频,为84MHz
    在这里插入图片描述
SWD外设配置
  1. 选择SYS外设
  2. 配置debug接口为串行接口(SWD)
  3. 引脚自动高亮
    在这里插入图片描述

(二)串口配置

原理图分析

Zigbee通信接口
  1. J28为Zigbee模块底座,其中Z_W_R和Z_W_T分别Zigbee串行通信接口
  2. Z_W_R和Z_W_T网络连接到J13,通过J13选择连接STM32还是USB转串口,我们选择连接到STM32上的USART1(PA9和PA10)
    在这里插入图片描述
    在这里插入图片描述
串行调试接口

如下图所示:

  1. 板载两个串行通信接口,串口1连接到USART1,串口2连接到USART3,我们选择USART3
  2. 由于USART3可以用于串口和485通信,我们选择485必须要把CON4和CON5拨到串口通信
    在这里插入图片描述

外设配置

USART1配置
  1. 配置PA9和PA10为USART1模式
  2. 打开USART1,配置为异步通信模式
    在这里插入图片描述

3.使能NVIC,优先级先默认为0
在这里插入图片描述

USART3配置
  1. 配置PB10和PB11为USART3模式
  2. 打开USART3外设,并配置为异步通信模式
    在这里插入图片描述

(三)GPIO配置

原理图分析

  1. PF7 PF8 PF9 PF10 控制板载的D6 D7 D8 D9
  2. PF6控制板载蜂鸣器
    在这里插入图片描述

GPIO外设配置

  1. 配置PF6-PF10为输出模式
  2. PF6默认输出低
  3. PF7-PF10默认输出高
    在这里插入图片描述

二、人机交互驱动开发

在这里插入图片描述

(一)FSMC

1、SRAM

原理图分析

通过下图所示:

  1. 采用IS61LV51216 SRM 为1MB,其实为了节约成本焊接的为IS61LV25616 为512KB
  2. 占用地址总线为18bit,数据总线为16bit
  3. 内存访问起始地址为0x6800 0000
    在这里插入图片描述
数据手册分析
read周期

地址建立时间 <7ns

数据建立+保持时间 = 7 + 2.5ns = 10ns
在这里插入图片描述

write周期

数据建立周期 = 5 + 3 = 8 + 5ns = 13ns
在这里插入图片描述

FSMC读写周期
read
在这里插入图片描述
write
在这里插入图片描述
外设配置
  1. 打开FSMC外设

  2. 配置FSMC
    1. 选择存储块为NE3
    2. 内存类型为SRAM
    3. 寻址长度为18bit
    4. 数据宽度为16bit

  3. 配置FSMC时序
    1. 地址建立时间为1分频 1/168 = 0.005 = 5ns
    2. 数据建立时间为3分频
    在这里插入图片描述

  4. 字节访问使能
    在这里插入图片描述

2、LCD

原理图分析
  1. 如下图所示,LCD采用8080接口,CS片选,D/C命令/数据切换,RD读操作,WR写操作,D[23:0]数据总线

  2. 如下图所示,数据总线D[0:15]连接FSMC总线接口处,RS起始就D/C接口,连接到FSMC地址总线A0,CS片选总线连接到FSMC_NE4上,WR写操作连接FSMC_NWE总线上,RD读操作总线连接到FSMC_NOE上,背光控制连接到PC7上
    在这里插入图片描述

  3. 写命令操作0x6C00 0000

  4. 写数据操作0x6C00 0002

数据手册分析

分析LCD驱动芯片时序图,计算得出地址和数据总线建立时间

地址保持周期 = 2ns

数据建立周期 = 12 + 1ns = 15ns
在这里插入图片描述

外设配置
  1. 打开FSMC外设

  2. 配置FSMC参数
    1. 内存块为NE4
    2. 内存类型为LCD
    3. LCD数据/命令切换映射到A0
    4. 数据宽度为16bit
    在这里插入图片描述

  3. 配置PC7为输出模式
    1. 上电默认输出高电平
    在这里插入图片描述

SPI

FLASH

原理图分析
  1. 如下图所示,SPI接口,CS连接到PH2,MISO连接到PB4,MOSI连接到PB5,CLK连接到PA5
    在这里插入图片描述
数据手册分析

1.时钟极性及相位

通过时序图分析,SPI CLK 高有效 时钟极性为高

时钟边沿为奇数边沿
在这里插入图片描述

2.SPI速率

满足数据传输速率,最大不能超过33MHz
在这里插入图片描述

外设配置
  1. 配置SPI时钟和数据引脚

  2. 配置SPI为全双工主机模式

  3. 配置SPI参数
    1. 通信速率为系统时钟4分频
    2. 时钟极性为低电平
    3. 相位为奇数边沿
    在这里插入图片描述

  4. 配置片选引脚PH2默认输出高

Touch

原理图分析
  1. 如下图所示,SPI接口,CS连接到PG15,MISO连接到PI2,MOSI连接到PI3,SCK连接到PI1
  2. 触摸中断连接到PG7
    在这里插入图片描述
数据手册分析
  1. 通过计算TCH+TCL得出SPI通信速率

  2. 通过时序图分析,SPI不工作时为低电平
    在这里插入图片描述

  3. 时钟边沿为奇数边沿

  4. 通信速率最小为400ns,大概2Mbit/S左右
    在这里插入图片描述

外设配置
  1. 配置SPI时钟和数据引脚

  2. 配置SPI为全双工主机模式

  3. 配置SPI参数
    1. 通信速率为系统时钟32分频
    2. 时钟极性为低电平
    3. 相位为奇数边沿
    在这里插入图片描述

  4. 配置SPI片选引脚
    1. 配置PG15为输出模式
    2. 配置PG15上电默认输出高,SPI低电平有效
    在这里插入图片描述

三、WebServer驱动开发

在这里插入图片描述

(一)SDIO

原理图分析

根据原理图分析,我们采用SD总线,4bit

配置CLK、DAT0-3
在这里插入图片描述
在这里插入图片描述

外设配置

  1. 打开SDIO外设

  2. 配置SD总线为4bit位宽

  3. 配置DMA接收和发送
    在这里插入图片描述

  4. 使能sdio全局中断 重点配置DMA优先级小于SDIO优先级
    在这里插入图片描述

(二)ETH

原理图分析

如下图所示,以太网PHY采用DP83848芯片,通信模式采用RMII接口

配置MDC、CLK、MDIO、DV、RXD0、RXD1;EN、TXD0、TXD1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据手册分析

Created with Raphaël 2.3.0 配置PHY地址为0x01 配置PHYSTS寄存器地址为0x10 配置Speed Status 掩码为0x0002 配置Duplex Status 掩码为0x0004

PHY地址

在这里插入图片描述

PHY寄存器

BMCR
在这里插入图片描述
BMSR
在这里插入图片描述
PHYSTS
在这里插入图片描述

外设配置

在这里插入图片描述
在这里插入图片描述

四、FreeRTOS配置及任务创建

(一)freeRTOS配置

配置内核定时器

由于我们采用STM32HAL库进行开发,HAL库内部使用systick定时器用于系统延时功能,而FreeRTOS也需要一个定时器用于操作系统内核调度使用, 顾需要修改HAL定时器时钟源

  1. 打开SYS选项
  2. 配置时钟源为TIM1
    在这里插入图片描述

配置FreeRTOS内核功能

  • 多数功能在后续程序设计中,需要根据具体功能,进行配置
  • 前期只需要配置动态内存空间和创建开始任务就可以
配置动态内存分配空间
  1. 采用FreeRTOS动态内存分配,开发效率高!顾我们程序内存使用,多数使用动态内存分配方式,分配动态内存总空间为23k=23552byte
    2. 使能FreeRTOS功能
    3. 分配内存空间为40960
    在这里插入图片描述

(二)任务创建

任务及优先级划分

Created with Raphaël 2.3.0 WebServer 高 Touch Zigbee GUI 低

任务堆栈划分

Created with Raphaël 2.3.0 WebServer 16K Touch 4K Zigbee 1K GUI 8K

1、中断优先级分配

在这里插入图片描述

2、printf重定向

  1. 在main.c文件内添加fputc函数,采用USART3作为调试接口
复制代码
    int fputc(int ch, FILE *p)
    {
    	while(!(USART1->SR & (1<<7)));
    	
    	USART1->DR = ch;
    	
    	return ch;
    }
  1. 在touch任务内打印启动信息在这里插入图片描述在这里插入图片描述

五、lwIP配置及网卡驱动

(一)lwIP配置

1、IP组网配置

  1. 使能lwIP
  2. 关闭DHCP服务
  3. 配置IP地址信息
    在这里插入图片描述

2、lwIP参数配置

  1. 分配10k内存空间
  2. 使能链路检测回调功能
    在这里插入图片描述

(二)ping测试

配置笔记本的网段和STM32开发板的网段一致

在这里插入图片描述
在这里插入图片描述

以太网断线检测

复制代码
    ethernetif.c
    /* USER CODE BEGIN 8 */
    /** * @brief  This function notify user about link status changement.
      * @param  netif: the network interface
      * @retval None
      */
    __weak void ethernetif_notify_conn_changed(struct netif *netif)
    {
      /* NOTE : This is function could be implemented in user file 
            when the callback is needed,
      */
    	
    	if(netif_is_link_up(netif)){
    		
    		printf("netif link is up\r\n");
    		if(!netif_is_up(netif)){
    			netif_set_up(netif);
    			printf("netif is up\r\n");
    		}
    	}else{
    		printf("netif link is down\r\n");
    		
    	}
    
    }

两种情况,一种是设备通电时断开网线,一种是网线没插,设备通电

  • 第一种, 断开网线之后再插入,通过ping命令进行检测
  • 第二种,断开网线,设备通电,当设备正常工作后,再插入网线,通过ping命令进行检测。

全部评论 (0)

还没有任何评论哟~