news 2026/7/9 13:26:48

STM32温湿度OLED显示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32温湿度OLED显示

面包板布局建议:把 STM32 插中间,两侧红蓝电源轨分别接 3.3V 和 GND,OLED 和 AHT10 各占一侧,SDA/SCL 用短跳线到 PB8/PB9 汇合。

 二、完整 Keil 工程代码

工程基于STM32 标准外设库 (StdPeriph_Lib),主频 72MHz。

目录结构

Project/
├── User/
│   ├── main.c
│   ├── delay.c / delay.h
│   ├── i2c_soft.c / i2c_soft.h
│   ├── oled.c / oled.h
│   ├── oledfont.h
│   └── aht10.c / aht10.h
└── ...标准库

1. delay.h

#ifndef __DELAY_H #define __DELAY_H #include "stm32f10x.h" void Delay_Init(void); void Delay_us(uint32_t us); void Delay_ms(uint32_t ms); #endif

2. delay.c

#include "delay.h" static uint32_t fac_us = 0; static uint32_t fac_ms = 0; void Delay_Init(void) { SysTick->CTRL &= ~(1 << 2); // 选择外部时钟 HCLK/8 = 9MHz fac_us = SystemCoreClock / 8000000; // 9 fac_ms = fac_us * 1000; } void Delay_us(uint32_t us) { uint32_t temp; SysTick->LOAD = us * fac_us; SysTick->VAL = 0x00; SysTick->CTRL |= 0x01; do { temp = SysTick->CTRL; } while ((temp & 0x01) && !(temp & (1 << 16))); SysTick->CTRL &= ~0x01; SysTick->VAL = 0x00; } void Delay_ms(uint32_t ms) { while (ms--) Delay_us(1000); }

3. i2c_soft.h

#ifndef __I2C_SOFT_H #define __I2C_SOFT_H #include "stm32f10x.h" #define I2C_SCL_PIN GPIO_Pin_8 #define I2C_SDA_PIN GPIO_Pin_9 #define I2C_GPIO_PORT GPIOB #define I2C_GPIO_CLK RCC_APB2Periph_GPIOB #define SCL_H GPIO_SetBits(I2C_GPIO_PORT, I2C_SCL_PIN) #define SCL_L GPIO_ResetBits(I2C_GPIO_PORT, I2C_SCL_PIN) #define SDA_H GPIO_SetBits(I2C_GPIO_PORT, I2C_SDA_PIN) #define SDA_L GPIO_ResetBits(I2C_GPIO_PORT, I2C_SDA_PIN) #define SDA_READ GPIO_ReadInputDataBit(I2C_GPIO_PORT, I2C_SDA_PIN) void IIC_Init(void); void IIC_Start(void); void IIC_Stop(void); uint8_t IIC_WaitAck(void); void IIC_Ack(void); void IIC_NAck(void); void IIC_SendByte(uint8_t byte); uint8_t IIC_ReadByte(uint8_t ack); #endif

4. i2c_soft.c

#include "i2c_soft.h" #include "delay.h" static void SDA_OUT(void) { GPIO_InitTypeDef g; g.GPIO_Pin = I2C_SDA_PIN; g.GPIO_Mode = GPIO_Mode_Out_OD; // 开漏 g.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(I2C_GPIO_PORT, &g); } static void SDA_IN(void) { GPIO_InitTypeDef g; g.GPIO_Pin = I2C_SDA_PIN; g.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(I2C_GPIO_PORT, &g); } void IIC_Init(void) { GPIO_InitTypeDef g; RCC_APB2PeriphClockCmd(I2C_GPIO_CLK, ENABLE); g.GPIO_Pin = I2C_SCL_PIN | I2C_SDA_PIN; g.GPIO_Mode = GPIO_Mode_Out_OD; g.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(I2C_GPIO_PORT, &g); SCL_H; SDA_H; } void IIC_Start(void) { SDA_OUT(); SDA_H; SCL_H; Delay_us(4); SDA_L; Delay_us(4); SCL_L; } void IIC_Stop(void) { SDA_OUT(); SCL_L; SDA_L; Delay_us(4); SCL_H; SDA_H; Delay_us(4); } uint8_t IIC_WaitAck(void) { uint16_t t = 0; SDA_IN(); SDA_H; Delay_us(1); SCL_H; Delay_us(1); while (SDA_READ) { if (++t > 250) { IIC_Stop(); return 1; } } SCL_L; return 0; } void IIC_Ack(void) { SCL_L; SDA_OUT(); SDA_L; Delay_us(2); SCL_H; Delay_us(2); SCL_L; } void IIC_NAck
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 13:26:29

外贸产品目录翻译成英文怎么保留排版?PDF、Excel 报价单和宣传册检查清单

外贸产品目录、报价单和宣传册翻译成英文时&#xff0c;不建议只检查译文是否通顺。这类文件通常同时包含产品图片、规格参数、价格单位、MOQ、包装信息、认证信息和多栏排版&#xff0c;真正影响交付质量的&#xff0c;往往是翻译后这些结构还能不能保持清楚。 ## 为什么外贸资…

作者头像 李华
网站建设 2026/7/9 13:26:07

GetQzonehistory:三步永久保存QQ空间回忆的完整指南

GetQzonehistory&#xff1a;三步永久保存QQ空间回忆的完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字记忆时代&#xff0c;QQ空间承载着我们最珍贵的青春印记。然而&am…

作者头像 李华
网站建设 2026/7/9 13:23:03

MCP3551与PIC18F86K22高精度ADC系统设计与实现

1. 项目背景与核心组件介绍在嵌入式系统开发中&#xff0c;模拟信号到数字信号的转换&#xff08;ADC&#xff09;是一个基础但至关重要的环节。MCP3551作为Microchip公司推出的一款22位高精度ΔΣ型模数转换器&#xff0c;配合PIC18F86K22这款高性能8位微控制器&#xff0c;构…

作者头像 李华
网站建设 2026/7/9 13:21:12

给Photoshop装上AI超能力:SD-PPP插件终极指南

给Photoshop装上AI超能力&#xff1a;SD-PPP插件终极指南 【免费下载链接】sd-ppp A Photoshop AI plugin 项目地址: https://gitcode.com/gh_mirrors/sd/sd-ppp 想象一下这样的场景&#xff1a;深夜两点&#xff0c;你盯着Photoshop里的空白画布&#xff0c;大脑一片空…

作者头像 李华
网站建设 2026/7/9 13:20:01

TMC7300与STM32F207ZG的有刷直流电机控制方案

1. 项目概述&#xff1a;TMC7300与STM32F207ZG的电机控制方案在工业自动化和机器人控制领域&#xff0c;有刷直流电机(BDC)因其结构简单、控制方便且成本低廉的特点&#xff0c;仍然是许多应用场景的首选驱动方案。然而要实现电机的稳定运行和精确控制&#xff0c;需要解决启动…

作者头像 李华
网站建设 2026/7/9 13:18:58

从清洁度、清洗剂、清洗设备,教你如何找到最适合的清洗方案

在规划和实施清洗工艺时&#xff0c;很多用户会问&#xff1a;有没有一套“万能方案”可以适用所有应用&#xff1f;答案是——没有。不存在放之四海而皆准的清洗工艺。 每一道清洗工艺都有其独特性&#xff0c;需要匹配特定的化学清洗剂、设备以及监测手段&#xff0c;才能达到…

作者头像 李华