stm32太阳能追光储能系统V2
大家好,我是 小杰学长
stm32太阳能追光储能系统V2.
增加了命令行交互和内置AT指令解析框架
(就是可以用电脑串口发送at指令控制板子的所有功能)
改动了spi 换成硬件
改动了硬件电源
增加了pcb原理图 附带上pcb源文件
增加了freertos 互斥锁 内存池 消息队列 任务管理等
增加了基于uart交互的shell命令行代码框架及命令链表
增加了AT指令数组和应用层协议解析框架
本章节gitee源码仓库链接跳转
建议你们先看一下第一版追光系统
追光系统初代链接跳转
仅保留了有修改的代码文件和CubeMX的ioc工程文件
直接用cubeMX打开ioc后生成工程
再把对应位置的代码进行比较 然后拷贝进去就行
stm32追光储能系统实物功能演示视频
各组件实现原理博客网址
- 光敏adc采集:https://blog.csdn.net/weixin_50257954/article/details/133049628?spm=1001.2014.3001.5502
- 舵机pwm控制:https://blog.csdn.net/weixin_50257954/article/details/133340143
- INA226功率监测I2C:https://blog.csdn.net/weixin_50257954/article/details/133635534
- TFT彩屏io模拟SPI原理:https://blog.csdn.net/weixin_50257954/article/details/133467010
- TFT彩屏驱动库解析:https://blog.csdn.net/weixin_50257954/article/details/133691503
- 硬件SPI控制TFT彩屏:会在本篇博客讲解
也没啥好讲的
把底层io模拟的接口换成hal_spi_transmit就行 - CLI-AT协议解析代码框架:在文章末尾
所使用的硬件
- 如下图
相比一代 硬件有所改动,如下:
1 去掉了充电功能
因为这是硬件的事
对于软件工程师
能检测到电流横向
知道是在充电还是放电就行
所以就成了虚拟的太阳充能了
不过面试的时候也可以说出来
2 电阻型号
可调电阻换成了1kΩ电阻
3 电源模块
换了个电源模块
能满足系统用电需求
支持2个18650电池输入
4 pcb底板
底板原理图pdf跳转
写代码的时候发现i2c1与spi1的内存地址映射冲突了
改成使用硬件spi2
嘉立创导出的pcb源文件 json格式
追光项目底板路径跳转 (在我gitee上)
我不是拉线工程师 我也不太懂
cubeMX初始化
- cubeMX中所有外设内部参数配置 我都做好了 你们可以有自己的配置方法 取决于你们看到的博客
1 cubeMX硬件引脚
引脚定义
单片机板子的引脚接线
用cubeMX打开文件夹中的IOC
即可了解每个模块的接口
都接到32的哪一个引脚上了
(当然你们可以有不同的io口接法)
如下图:
SPI
spi2
彩屏只需要接收
所以我们只需要开启只发送主机spi模式即可
UART
115200波特率
记得使能串口中断
2 cubeMX freeRTOS配置
统一图片演示
你们自己看 看不明白 看代码
其他默认
rtos系统配置
堆大小改大一点 原来的不够用了
rtos功能配置
任务和队列
就弄了三个
cli命令行的代码中
还另外自己创建了:
1个线程
1个给串口用的互斥锁
给串口中断接收中断用的
3个消息队列
3个内存池
cubeMX没有内存池
自己在头文件中打开,如下图
头文件链接跳转-> (在我gitee上)
系统框图
硬件系统框架
看之前的博客
追光系统初代链接跳转
CLI-AT协议解析代码框架
我学生写了 我就不写了 大家自己看
流程图 (在我gitee上)
他的博客链接
结合源码看完了 一定让你们醍醐灌顶
一下子学会用硬件uart 中断 DMA
注册命令行命令的时候用的链表
是我学生的
像不像智能家居的控制链表和设备链表
AT指令的注册换了另一种方式
用数组
感受到他两的区别没
感受到了 简历怎么写我就不教了哈
嘻嘻(#.#)
展望与写进简历
展望
- 被人吐槽cli-at框架白板演示 写的稀碎 看来当老师有待改进
- 被人吐槽没有通信协议框架和PID自动控制算法
因为特别行业用单片机都会考虑到自动控制算法
电机 信号 电源 控制
有待改进 粉丝们你们可以考虑用无刷电机和pid算法对角度位置进行控制
至于通信协议框架 这个玩意 你们把lwip移植进去玩玩吧 - 其实可以用usb-cdc命令行交互 然后就能用comshell登录 支持退格键输入
- 用ota固件升级 逼格又上去了 把mcuboot移植进去 也不知道内存够不够 没事 换芯片
- 命令行解析到是AT指令后,
AT指令解析框架可能存在功能复杂的情况
可以异步操作,自己跑一个任务
这样就不影响命令行自己读取新的串口传过来的新数据了 - AT指令解析框架在控制硬件层相关的操作的时候
可以加个中间层隔离软硬件代码
就像咱们智能家居项目的posix消息队列线程一样
将控制链表对设备链表的硬件控制分隔开
届时非常漂亮 - spi-lcd+gpio-key实现一两个ui画面切换
写进简历
- 用了哪些总线硬件外设就不说了
- TFT彩屏驱动库 可以跟他扯一下
- CLI-AT协议解析代码框架
- 展望里所有提到的你们觉得能自己做出来都可以写进去
- freertos 互斥锁 内存池 消息队列 任务管理
- 嘉立创原理图设计 这个看你敢不敢写了
key实现一两个ui画面切换
写进简历
- 用了哪些总线硬件外设就不说了
- TFT彩屏驱动库 可以跟他扯一下
- CLI-AT协议解析代码框架
- 展望里所有提到的你们觉得能自己做出来都可以写进去
- freertos 互斥锁 内存池 消息队列 任务管理
- 嘉立创原理图设计 这个看你敢不敢写了
相关文章:

stm32太阳能追光储能系统V2
大家好,我是 小杰学长 stm32太阳能追光储能系统V2. 增加了命令行交互和内置AT指令解析框架 (就是可以用电脑串口发送at指令控制板子的所有功能) 改动了spi 换成硬件 改动了硬件电源 增加了pcb原理图 附带上pcb源文件 增加了freertos 互斥锁…...

Docker笔记-解决非交互式运行python时print不输出的问题
换句话来说就是在docker中如何不会python的print 只需要在启动时,不让python缓冲其输出。 关键命令如下:PYTHONUNBUFFERED1 如下: docker run -e PYTHONUNBUFFERED1 <your_image> 下面解释下-e "-e"选项的全称是"…...

06- 数组的基础知识详细讲解
06- 数组的基础知识详细讲解 一、基本概念 一次性定义多个相同类型的变量,并且给它们分配一片连续的内存。 int arr[5];1.1 初始化 只有在定义的时候赋值,才可以称为初始化。数组只有在初始化的时候才可以统一赋值。 以下是一些示例规则: …...

CentOS6系统因目录有隐含i权限属性致下属文件无法删除的故障一例
CentOS6服务器在升级openssh时因系统目录权限异常(有隐含i权限属性),下属文件无法删除,导致系统问题的故障一例。 一、问题现象 CentOS6在升级openssh时,提示如下问题: warning: /etc/ssh/sshd_config c…...
【视频转码】ZLMediaKit漏洞报告的问题
漏洞问题: 支持ss1 rc4密码套件(bar mitzvah) 漏洞级别: 中危 漏洞修复: 方法:避免使用RC4密码,参考代码如下: 修改文件位于:webrtc/DtlsTransport.cpp ret SSL_CTX_set_cipher_list(ssl…...
100道大模型面试八股文
算法暑期实习机会快结束了,校招大考即将来袭。 当前就业环境已不再是那个双向奔赴时代了。求职者在变多,岗位在变少,要求还更高了。 最近,我们陆续整理了很多大厂的面试题,帮助球友解惑答疑和职业规划,分…...

【ARM Cache 及 MMU 系列文章 6.2 -- ARMv8/v9 Cache 内部数据读取方法详细介绍】
请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Direct access to internal memoryL1 cache encodingsL1 Cache Data 寄存器Cache 数据读取代码实现Direct access to internal memory 在ARMv8架构中,缓存(Cache)是用来加速数据访…...

使用Vue.js将form表单传递到后端
一.form表单 <form submit.prevent"submitForm"></form> form表单像这样写出来,然后把需要用户填写的内容写在form表单内。 二.表单内数据绑定 <div class"input-container"><div style"margin-left: 9px;"&…...

6、架构-服务端缓存
为系统引入缓存之前,第一件事情是确认系统是否真的需要缓 存。从开发角度来说,引入缓存会提 高系统复杂度,因为你要考虑缓存的失效、更新、一致性等问题;从运维角度来说,缓存会掩盖一些缺 陷,让问题在更久的…...

服务器遭遇UDP攻击时的应对与解决方案
UDP攻击作为分布式拒绝服务(DDoS)攻击的一种常见形式,通过发送大量的UDP数据包淹没目标服务器,导致网络拥塞、服务中断。本文旨在提供一套实用的策略与技术手段,帮助您识别、缓解乃至防御UDP攻击,确保服务器稳定运行。我们将探讨监…...

美团发布2024年一季度财报:营收733亿元,同比增长25%
6月6日,美团(股票代码:3690.HK)发布2024年第一季度业绩报告。受益于经济持续回暖和消费复苏,公司各项业务继续取得稳健增长,营收733亿元(人民币,下同),同比增长25%。 财报显示,一季度,美团继续…...

sql注入-布尔盲注
布尔盲注(Boolean Blind SQL Injection)是一种SQL注入攻击技术,用于在无法直接获得查询结果的情况下推断数据库信息;它通过发送不同的SQL查询来观察应用程序的响应,进而判断查询的真假,并逐步推断出有用的信…...

docker-compose部署 kafka 3.7 集群(3台服务器)并启用账号密码认证
文章目录 1. 规划2. 服务部署2.1 kafka-012.2 kafka-022.3 kafka-032.4 启动服务 3. 测试3.1 kafkamap搭建(测试工具)3.2 测试 1. 规划 服务IPkafka-0110.10.xxx.199kafka-0210.10.xxx.198kafka-0310.10.xxx.197kafkamp10.10.xxx.199 2. 服务部署 2.1…...

LeetCode-704. 二分查找【数组 二分查找】
LeetCode-704. 二分查找【数组 二分查找】 题目描述:解题思路一:注意开区间和闭区间背诵版:解题思路三: 题目描述: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target …...

Rust 性能分析
都说Rust性能好,但是也得代码写得好,猜猜下面两个代码哪个快 . - 力扣(LeetCode) use std::collections::HashMap; use lazy_static::lazy_static;lazy_static! {static ref DIGIT: HashMap<char, usize> {let mut m HashMap::new();for c in …...
Gradle和Maven都是广泛使用的项目自动化构建工具
Gradle和Maven都是广泛使用的项目自动化构建工具,但它们在多个方面存在差异。以下是关于Gradle和Maven的详细对比: 一、构建脚本语言 Maven:使用XML作为构建脚本语言。XML的语法较为繁琐,不够灵活,对于复杂的构建逻辑…...

Seed-TTS语音编辑有多强?对比实测结果让你惊叹!
GLM-4-9B 开源系列模型 前言 就在最近,ByteDance的研究人员最近推出了一系列名为Seed-TTS的大规模自回归文本转语音(TTS)模型,能够合成几乎与人类语音无法区分的高质量语音。那么Seed-TTS的表现究竟有多强呢?让我们一起来感受下Seed-TTS带来的惊喜吧! 介绍Seed-TTS…...

Vue3——实现word,pdf上传之后,预览功能(实测有效)
vue-office/pdf - npm支持多种文件(**docx、excel、pdf**)预览的vue组件库,支持vue2/3。也支持非Vue框架的预览。. Latest version: 2.0.2, last published: a month ago. Start using vue-office/pdf in your project by running npm i vue-office/pdf. There are …...

JVM之【类的生命周期】
首先,请区分Bean的声明周期和类的声明周期。此处讲的是类的声明周期 可以同步观看另一篇文章JVM之【类加载机制】 概述 在Java中数据类型分为基本数据类型和引用数据类型 基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载 按照]ava虚拟机…...
分库分表场景下,如何设计与实现一种高效的分布式ID生成策略
在构建大规模分布式系统时,随着数据量的爆炸式增长,单个数据库往往难以承载如此庞大的数据存储与访问需求。这时,分库分表便成为一种有效的解决方案,它通过将数据分散存储在多个数据库或表中,从而提高系统的处理能力和…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...

Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

如何做好一份技术文档?从规划到实践的完整指南
如何做好一份技术文档?从规划到实践的完整指南 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...
LTR-381RGB-01RGB+环境光检测应用场景及客户类型主要有哪些?
RGB环境光检测 功能,在应用场景及客户类型: 1. 可应用的儿童玩具类型 (1) 智能互动玩具 功能:通过检测环境光或物体颜色触发互动(如颜色识别积木、光感音乐盒)。 客户参考: LEGO(乐高&#x…...
DriveGPT4: Interpretable End-to-end Autonomous Driving via Large Language Model
一、研究背景与创新点 (一)现有方法的局限性 当前智驾系统面临两大核心挑战:一是长尾问题,即系统在遇到新场景时可能失效,例如突发交通状况或非常规道路环境;二是可解释性问题,传统方法无法解释智驾系统的决策过程,用户难以理解车辆行为的依据。传统语言模型(如 BERT…...