SmartDeviceControl_FreeRTOS_Hal_F103
系统框图
## 显示子设备
框图
- 我们不想让文件互相调用
遇到的问题:OLED 无响应,I2C无法工作
解决:使用的是软件I2C,问题在于OLED的驱动中已经包含获取从机应答的函数
### ==更新:屏幕为2.8TFT-LCD==
#### 使用FSMC来模拟8080并口驱动LCD
FSMC_D0 - FSMC_D15
: 16条数据线FSMC_NOE --- LCD
读使能FSMC_NWE --- LCD
写使能FSMC_NE1
——LCD片选FSMC_A10
——LCD 数据/指令切换 高电平表示数据,低电平表示指令- 4条线
LCD_BL —— GPIO_B_0
背光控制LCD_RST—— 复位
:硬件上已经连接到reset上,无需配置
- 硬件上的连接:
- 这里的FSMC_NE4连接到LCD上,故我们需要访问FSMC BANK1 NOR/PSRAM 4,即`0x6c00 0000-0x6fff ffff`,这样FSMC才会自动产生时序。
- 我们使用FSMC即是当我们读写该地址范围时,会自动产生时序,访问的地址位为1,地址线输出高电平。
- 我们的A10来切换数据/指令两种状态便是通过访问两个不同的地址。
- cubeMX的配置:
-
添加:电阻触摸屏XPT2046
使用模拟spi的方式和触摸控制器通讯,ADC为12位,这也是2046的由来
触摸的位置和电压输出有一个线性的变化,通过ADC采集这个电压从而计算出位置
校准:确定这个线性的关系
MOSI,MISO,CS,SCLK,INT
五条线和触摸IC进行连接,INT(PEN)
用于触摸时产生一个中断信号。- 校准屏幕并保存校准数据到EEPROM
使用
EEPROM —— 24C02
来存储校准触摸屏的数据- 24C02 设备的读操作地址为:0xA1;写操作地址为:0xA0
- 读时序是复合时序,包括读时序和写时序,先发送写地址,再写进一个要读取的地址;接着再发送读地址,从机便会一直传输数据,直到主机发送非应答信号才停止。
- 写操作包括 单字节写入 和 页写入,在单字节写时序时,每次写入数据时都需要先写入设备的内存地址才能实现;页写入仅需写入第一个内存地址,后面会根据顺序写入。
移植LVGL
遇到的问题:
1.调试时LCD运行正常,退出调试直接上电运行出现错误
原因:
1.外围设备没有初始化好,考虑加上初始化时的延时函数
2.该初始化程序的下一个程序对其有所影响
2.LVGL显示的方向性问题
原因:和设置LCD的扫描方向有关
输入子系统
网络输入 可作为一个输入设备,将输入的信息放到环形缓冲区
网络输入出现的问题:传输几次,才收到一次。
- 原因:
- 解决:
网络子系统
框图
- 连接网卡设备可以使用不同的接口,预留出接口可扩展
A[Net_device]==>B[esp8266]==>c[AT_Command]==>D[UART_dev]==>e[KAL_UART_DEV]==>f[CAL_UART_DEV]
网络设置
遇到的问题
ESP-01S
sntp
使用MQTT连接阿里云平台AT指令
AT+CWMODE=1 //配置STA模式
AT+CIPSNTPCFG=1,8,"cn.ntp.org.cn","ntp.sjtu.edu.cn" //配置时间服务器,进行时间同步
AT+CWJAP="SSID","SSID_password" //连接wifi
AT+MQTTUSERCFG=0,1,"NULL","name","password",0,0,"" //设置MQTT属性
AT+MQTTCLIENTID=0,"ClienID"
//设置MQTT ID,注意!!要在ID信息每一个”,“前加”\“进行转义!!!AT+MQTTCONN=0,"域名",1883,1
//发送MQTT域名,域名获取AT+MQTTSUB=0,"订阅topic",1
//订阅的主题
相关知识
STA和SoftAP
在无线网络领域,特别是Wi-Fi技术中,"Station"(简称STA)和"SoftAP"(Software Access Point)是两个重要的概念。它们分别代表着客户端和接入点的角色。
Station (STA)
Station(简称STA)是指Wi-Fi网络中的客户端设备,它可以连接到一个或多个接入点(Access Point, AP),以便访问互联网或其他网络资源。Station通常指的是具有Wi-Fi功能的设备,如智能手机、平板电脑、笔记本电脑等。
SoftAP (Software Access Point)
SoftAP(Software Access Point)是一种软件实现的接入点,它可以将一个设备转变为Wi-Fi接入点,允许其他Station设备连接到它。SoftAP常用于嵌入式设备或移动设备,如智能家居设备、便携式路由器等。
- 功能:
- 模拟一个Wi-Fi接入点。
- 允许其他Station设备连接并访问网络资源。
- 可以配置为开放或受密码保护的网络。
- 特点:
- 可以在没有物理接入点的情况下创建Wi-Fi网络。
- 通常用于设备配置或临时网络搭建。
- 设备本身既可以作为SoftAP也可以作为Station,实现设备间的直接通信。
比较
- 角色:
- Station:作为客户端,连接到接入点。
- SoftAP:模拟接入点,允许其他Station连接。
MQTT
- 它是物联网常用的应用层协议,运行在 TCP/IP 中的应用层中,依赖 TCP 协议,因此它具有非常高的可靠性
- 三个角色:发布者(Publisher)、服务器(Broker)以及订阅者
(Subscriber),我们所使用的云平台便是服务器 - 因此订阅者需要指定订阅的主题名字与服务质量(QoS),订阅者能订阅多个主题,也就能接收到多个发布者发布的消息。
- 发布者也需要首先与服务器建立会话,并且指定发送的主题名字与服务质量,同时它也能向多个不同的主题发送消息。
- 主题:一个主题可以有多个级别,各个级别之间用斜杠字符分隔,
例如/test 和 /test/test1/test2 都 是有效的主题。 - 连接需要的参数:
- 客户端ID:用于标识客户端并跟踪其会话状态。这是MQTT协议的核心组件之一,因为它帮助服务器区分不同的客户端并处理它们的会话。
- 用户名和密码:用于客户端的身份验证。虽然不是所有MQTT服务器都要求认证,但对于需要认证的服务器来说,这些凭据是非常重要的,因为它们确保了客户端的安全性和权限管理。
- 服务器主机地址,端口号1883
业务子系统
遇到的问题:网络输入事件无法控制设备
原因
FreeRTOS
- 队列:输入队列
- 谁放队列:
- 按键输入事件:在中断处理函数中,将事件放入队列
- 网络输入解析并上报为事件
- 谁读队列:
- App综合控制函数,读取队列并控制
- 谁放队列:
出现的错误
- 在中断中调用FreeRTOS的代码时,中断的优先级 大于 RTOS允许的最高优先级
- 即FreeRTOS能够参与到中断的最高优先的等级
- 消息队列传输的本质
- 实质上是数据之间的复制
GIT需要注意的问题
- 一个分支进行修改并提交到暂存区,此时切换分支会导致更改影响到另一个分支
解决:
使用
git stash
来将原来分支的内容进行暂存,并最好加上描述git stash save ""
。使用方法:git-stash用法小结将分支的工作区内容丢弃
放弃修改
如果不指定切换到哪个分支,那就是切换到当前分支,虽然HEAD的指向没有变化,但是后面的两个恢复过程依然会执行,于是就可以理解为放弃index和工作区的变动。但是出于安全考虑 git 会保持 index 的变动不被覆盖。1、只放弃工作区的改动,index 保持不变,其实就是从当前 index 恢复 工作区:
放弃工作区中全部的修改
git checkout .放弃工作区中某个文件的修改:
git checkout -- filename先使用 git status 列出文件,然后 git checkout -- app/Http/Controllers/Read/Read3Controller.php
- 更新.gitignore,还需要手动将已添加跟踪的文件移除
更新 Git 忽略已追踪的文件: 如果你已经将一些应该被忽略的文件添加到了Git中,那么仅修改
.gitignore
文件是不够的。你需要使用git rm --cached <file>
命令来从Git索引中移除文件,但不删除实际的文件:git rm --cached path/to/file.log
移除整个目录,需要加上-r,递归删除
git rm --cached -r
然后,再次添加
.gitignore
文件,确保Git注意到更新:git add .gitignore
各种问题
在Keil进入debug时直接进入运行状态,无法打断无法调试
原因:进入debug时,没有给设备上电,仅仅依靠调试器的电源,供电不足,接上电源之后,正常运行
vscode中有时候出现符号无法解析
解决:
- 打开要刷新的项目文件夹。
- 按下键盘上的Ctrl + Shift + P组合键,打开命令面板。
- 输入”Reload Window”并选择该选项。
GPIO
随机推荐
- 网络化的控制系统简介(NCS)
作为一个搞物联网应用的,最近才接触到NCS这个概念.有点东西,赶紧记录一下. NCS由通过网络连通的控制环路组成,控制信号和反馈信号会在控制器和本地系统间交换.典型的方块图如下: 其中,本地(Plan ...
- Linux 提权-SUID/SGID_2
本文通过 Google 翻译 SUID | SGID Part-2 – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释 ...
- PS工具的基本使用
常见的图片格式: 切片工具的使用 1.用切片选中图片 2.导出切片 3.切片悬着工具 可以选择指定 切片框 删除. 点击图层 切图 清除切片 基于参考线的切片 切图插件Cutterman
- IntellJ Idea遇到Errors occurred while compiling module的解决方法
问题描述 Information:java: Errors occurred while compiling module '0-common' Information:javac 11 was us ...
- 【SQL】晨光咖啡馆,过滤聚合的微妙碰撞
这天,小悦懒洋洋地步入办公楼下的咖啡馆,意外地与一位男子不期而遇.他显然因前一晚的辛勤工作而略显疲惫,却仍选择早到此地,寻找一丝宁静与放松.他叫逸尘,身姿挺拔,衣着简约而不失格调,晨光下更显英俊不凡, ...
- 玄机-第一章 应急响应-Linux日志分析
目录 前言 简介 应急开始 准备工作 查看auth.log文件 grep -a 步骤 1 步骤 2 步骤 3 步骤 4 步骤 5 总结 前言 又花了一块rmb玩玄机...啥时候才能5金币拿下一个应急靶 ...
- 使用 Node.js 和 Express 构建基本的 Web API
使用 Node.js 和 Express 构建 Web API Web API Node.js 中的 http 模块 创建 Express 框架 Web 应用程序 Express 框架 Express ...
- [春秋云镜] Initial
[春秋云镜] Initial **整套网络环境拓扑:** 一.打进内网 开局一个ip:39.101.184.25,fscan扫一下 存在thinkphp5.0.23的漏洞,可以rce,我们 ...
- PKUWC2024游记
PKUWC2024 游记 day -???? 得知今年冬令营在育才,非常高兴不用出远门了. day 1 当天上午 7:00 起来,然后做车去报道,非常堵车.感觉育才环境挺好的,~不像某人在读学校一样. ...
- 【C】Re09 结构体
一.结构体 Struct 创建和基本使用 #include <stdio.h> #include <stdlib.h> #include <string.h> // ...