单片机--开漏输出和推挽输出
STM32推挽输出和开漏输出基本概念1、推挽输出(Push-Pull Output)由互补的N-MOS和P-MOS管构成推挽结构: 高电平输出:P-MOS导通,输出直接连接VDD低电平输出:N-MOS导通,输出直接接地典型应用:LED控制、继电器驱动等需要强驱动能力的场景2、开漏输出(Open-Drain Output)仅包含N-MOS管结构: 低电平输出:N-MOS导通高电平状态:MOS管断开,需外接上拉电阻典型应用:I2C总线、电平转换等需要”线与”功能的场景 核心差异对比 特性 推挽输出 开漏输出 输出结构 双MOS推挽结构 单MOS+外部上拉 驱动能力 强(直接驱动高低电平) 弱(高电平依赖外接电阻) 电平类型 固定电源电压 高电平由外部上拉电压决定 总线冲突防护 无 支持多设备”线与” 功耗 静态电流较大 静态功耗较低 电平转换能力 不支持 支持跨电压域通信 配置方法在gpio初始化的时候配置 推挽输出配置流程 123456789101112/* 时钟使能 */RCC_APB2PeriphClockCmd(RCC_APB2Perip...
关于AI的一些思考
最近常常看到各种关于 AI 的讨论,有担忧也有惊喜。想起这几年自己与 AI 的一些接触和感受,决定写下来,作为一个阶段性的记录。 现在大家谈论最多的 AI,大多指的是大模型。我最初接触大模型是在 2022 年 12 月,那时候 ChatGPT 刚刚上线不久,在推特上引发了热潮。我出于好奇,也尝试了一下。它的表现的确令人惊讶,能逐渐读懂人想表达的内容,并生成看似合理的回答。 此后,我也尝试了其他国外的 AI 模型,比如 Google 的 Gemini、X(原 Twitter)中的 Grok,以及 GitHub 社区中的 Copilot,它们在专业领域或编程方面都有出色表现。 当然,国内的大模型这两年进步也非常快,很多公司都开发了自己的大模型,并且可以明显感受到它们在不断进步。我算是阿里通义灵码的首批测试用户之一。在这两年中,我能清楚地感觉到它一步步在成长:从最初只能勉强读懂函数、生成单元测试还经常出错,到现在已经可以切换模型、直接编辑文件并生成代码。 去年给我体验最好的 AI 是国内的 Kimi,它的特色是能处理超长文本,虽然现在这一点可能已经不再是独特优势。国内其他表现优秀的模型...
数据库---MySQL使用
数据库 MySQL使用数据格式在 MySQL 中,数据以表的形式存储,每个表由若干列组成,每列有特定的数据类型。以下是一个示例表的结构: 123456789CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, -- 主键,唯一标识每行,自动递增 name VARCHAR(50) NOT NULL, -- 用户名,最大长度50字符,不能为空 age INT, -- 用户年龄 DECIMAL created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 创建时间,默认为当前时间); 数据类型 数据类型 描述 示例 INT 整型数据,通常用于存储计数或ID id INT AUTO_INCREMENT VARCHAR 可变长度字符串,需指定最大长度 name VARCHAR(50) DECIMAL 高精度定点数,适用于金额等数据 price DECIMAL(10, 2...
Linux--configure基础配置
Linux 软件安装在 Linux 中,除了通过源在线安装软件包外,下载源码包并手动编译安装也是常见的方法。 Configure 脚本简介开源源码包通常包含一个 configure 脚本,它会根据系统环境自动配置编译参数并生成 Makefile。以下是对 configure 脚本的参数介绍。 Configure 参数详解configure 脚本支持许多参数,其中一些是必须的,一些是可选的。 重要参数build--build 表示当前使用的构建机器 host--host 表示程序运行的平台。 target--target 用于指定程序将处理的平台,通常在编译交叉工具链时使用。 例如: 1. /configure --build=i386-linux,--host=arm-linux 表示使用 i386 架构的 Linux 系统构建,目标运行平台为 ARM 架构的 Linux 系统。 常见参数 --help运行以下命令可查看所有可用配置选项 1./configure --help --prefix=DIR指定文件安装目录,建议使用绝对路径 --sysconfdir=DI...
过去的2024
又过去了一年,今年过得格外平淡。每天的生活就像一条缓缓流淌的小溪,波澜不惊,却又能清晰地感受到时间在流逝,过得忒快。 年初,有定下了两个小目标,一个是买房,另一个是管综联考。为此有意识存了点钱,还加大了理财投资,股市行情比起我的生活精彩得多。也许是没把重心放在学习上,只是最初复习了几个月,就仓促考了下,大概率没过。 今年外出的少,大多数周末都是宅在家,很少闲逛。但也去了好几个地方,石家庄、重庆、武汉、恩施。石家庄的“炸臭豆腐馒头”让我印象深刻,馒头炸的金黄酥脆,夹着一块柔嫩臭豆腐,味道一绝;恩施大峡谷也是一个值得去的地方,沉浸在自然里,真让人身心放松。 今年让我最欣慰的是每周坚持更新文章。虽说质量可能不太行,但总归算是技术上的一点积累。AI发展的太快了,技术的进步,也让我更加意识到持续学习的重要性。在平常工作中,我常常依赖“ChatGPT”和“Copilot”,它们帮助解决了很多问题,也节省了很多时间。 “致虚极,守静笃”,道德经里面的一句话,我可能慢慢理会到了其中含义。生活不一定非得追求大起大落,在平淡中找到自己的节奏,保持内心的宁静,也是一种成长。 展望明年,希望能把今年没完...
小程序--搭建匿名聊天室
搭建一个匿名聊天室之前在鼓捣博客“评论区”的时候,弄过一个小程序,这次分享出来。在本篇文章中将介绍如何使用 Node.js 和Socket.IO 创建一个简单的匿名聊天室。聊天室将为每个用户生成唯一的 ID,并支持多人实时聊天。 技术选型 Node.js:后端运行时,用于搭建 Web 服务。 Express:轻量级 Web 框架,用于快速搭建 HTTP 服务。 Socket.IO:实现实时双向通信。 UUID:生成唯一用户 ID,确保用户在匿名环境下具有唯一标识 环境准备 node :v18.13.0 npm :v8.19.3 module 安装 123npm install express socket.ionpm install uuid 代码分析服务端代码:server.js 1234567891011121314151617181920212223242526272829303132333435const express = require('express');const http = require('http');con...
单片机--sc8886芯片寄存器读写
sc8886芯片寄存器读写功能需求使用stm32f103芯片与sc8886通信,实现控制充电参数设置与充电状态监测。 硬件连接单片机I2c引脚选用 I2C1(PB6,PB7),sc8886硬件参考南芯官方文档 寄存器功能通过阅读sc8886的数据手册,可了解到I2C地址为0x6b,充电参数设置大致如下: 寄存器地址 功能 0x00 芯片控制信息 0x20 充电状态 0x02 充电电流设置 0x04 充电电压设置 0x0c 最小系统电压 0x06 OTG电压 0x08 OTG电流 0x0e 当前输入电流 0x0a 当前输入电压 0x34 芯片控制含复位寄存器 代码实现功能比较简单,直接贴代码。I2C接口 I2C 通讯地址扫描 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051uint8_t I2C_IsDeviceReady(I2C_TypeDef* I2Cx1, uint8_t addres...
shell--批处理MP3文件
shell 案例批量处理处理MP3文件 场景网站中播放音乐使用的是Aplayer,在构建静态文件时,需要将音乐文件转换为JSON格式,才能在Aplayer中播放。如以下格式: 1234567{ "title": "前前前世", "author": "RADWIMPS", "url": "xxxx.mp3", "pic": "xxxx.jpg", "lrc": "xxxx.lrc"} 完整示例写法参考Linux–Hexo搭建与配置 我的歌单中存了几百首歌,肯定不可能自己全部手动转换,因此写了一个脚本,自动完成。最开始我的源文件都是以“作者-歌曲名”格式保存的,因此很容易根据名字提取。初始版本如下: 1234567891011121314151617181920212223242526272829303132333435363738394...













