物联网智慧教室项目2

D2智慧教室项目驱动开发

2.1环境监控驱动开发

2.1.1外设驱动开发流程

原理图分析->数据手册分析->外设配置

2.1.2时钟&SWD

(一)时钟原理图

如下图所示,STM32F407外部高速晶振为25MHz,分别连接到PH0和PH1引脚!
 

(二)SWD原理图

如下图所示,STM32F407仿真接口SWD分别连接到PA13和PA14引脚!
 

(三)外设配置
(一)时钟外设配置

(1)使能时钟源

1. 选择RCC外设
2. 选择高速时钟为外部时钟源
3. PH0和PH1引脚自动高亮

(2)配置时钟树

 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. 引脚自动高亮

2.1.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,配置为异步通信模式


   USART3配置

1. 配置PB10和PB11为USART3模式
2. 打开USART3外设,并配置为异步通信模式

2.1.4GPIO配置

(一) 原理图分析


1. PE2 PF8 PF9 PF10 控制板载的D1 D2 D3 D4
2. PF6控制板载蜂鸣器

 (二)GPIO外设配置


1. 配置PF6,PE2 , PF8-PF10为输出模式
2. PF6默认输出低
3.PE2 , PF8-PF10默认输出高

2.2人机交互驱动开发

(一)FSMC

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. 字节访问使能


 

 补充:

 

 使能Write Ooeration

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

(二)数据手册分析

1. 分析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不工作时为低电平

1. 时钟边沿为奇数边沿
2. 通信速率最小为400ns,大概2Mbit/S左右

(三)外设配置

1. 配置SPI时钟和数据引脚
2. 配置SPI为全双工主机模式
3. 配置SPI参数
    1. 通信速率为系统时钟32分频
    2. 时钟极性为低电平
    3. 相位为奇数边沿
 

4. 配置SPI片选引脚
    1. 配置PG15为输出模式
    2. 配置PG15上电默认输出高,SPI低电平有效

2.3WebServer驱动开发

SDIO

(一)原理图分析

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

(二)外设配置

1. 打开SDIO外设
2. 配置SD总线为4bit位宽
3. 配置DMA接收和发送

 4. 使能sdio全局中断 重点配置DMA优先级小于SDIO优先级

ETHRENET

(一)原理图分析

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

(二)数据手册分析
op=>operation:  配置PHY地址为0x01

op1=>operation:  配置PHYSTS寄存器地址为0x10

op2=>operation:  配置Speed Status 掩码为0x0002

op3=>operation:  配置Duplex Status 掩码为0x0004

op->op1->op2->op3

 

 PHY地址

 PHY寄存器

BMCR

BMSR

   

PHYSTS

 (三)外设配置

 PA1,PA2,PC1,PA7,PC4,PC5,PG11,PG13,PG14

 

 2.4FreeRTOS配置及任务创建

freeRTOS配置

 配置内核定时器

由于我们采用STM32HAL库进行开发,HAL库内部使用systick定时器用于系统延时功能,而FreeRTOS也需要一个定时器用于操作系统内核调度使用, 顾需要修改HAL定时器时钟源
1. 打开SYS选项
2. 配置时钟源为TIM1

 配置FreeRTOS内核功能

- 多数功能在后续程序设计中,需要根据具体功能,进行配置
- 前期只需要配置动态内存空间和创建开始任务就可以

配置动态内存分配空间

1. 采用FreeRTOS动态内存分配,开发效率高!顾我们程序内存使用,多数使用动态内存分配方式,分配动态内存总空间为23k=23552byte
    2. 使能FreeRTOS功能
    3. 分配内存空间为40960


任务创建

任务及优先级划分

op=>operation:  WebServer 高

op1=>operation:  Touch

op2=>operation:  Zigbee

op3=>operation:  GUI	低

op->op1->op2->op3

 任务堆栈划分

op=>operation:  WebServer  16K

op1=>operation:  Touch	   4K

op2=>operation:  Zigbee    1K

op3=>operation:  GUI	   8K

op->op1->op2->op3

中断优先级分配

在freeRTOS里

printf重定向

1. 在main.c文件内添加fputc函数,采用USART3作为调试接口

int fputc(int ch, FILE *f)
{
    while((USART3->SR & 0X40)==0);
    USART3->DR = (uint8_t) ch;
    return ch;
}

2. 在touch任务内打印启动信息 

2.5LWIP配置及测试

LWIP配置

IP组网配置

1. 使能lwIP
2. 关闭DHCP服务
3. 配置IP地址信息

  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命令进行检测
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值