2️⃣ 5V锂电池
3️⃣ 5V 0.2A直流风扇
构成主要芯片
1️⃣ 主控芯片:STM32F103C8T6
2️⃣ 电机驱动芯片:DRV8833
3️⃣ 温度传感器:GX18B20
4️⃣ 5V转3.3V稳压芯片:AMS1117-3.3
连接接口
1️⃣ 用户充电接口:Type-C
2️⃣ 充电连接口:MX1.25mm针座接口
3️⃣ 放电接口:XH2.54mm2P接口
4️⃣ 风扇接口:SH1.0mm4P母座
5️⃣ 下载程序接口:2.54mm单排弯针
原理图
五、元器件清单
数量 | 说明 | 值 | 主要类别 | 次要类别 |
---|---|---|---|---|
2 | 22pF | 22pF | 电容 | 贴片电容(MLCC) |
8 | 100nF | 100nF | 电容 | 贴片电容(MLCC) |
2 | 22uF | 22uF | 电容 | 贴片型铝电解电容 |
1 | 2.2uF | 2.2uF | 电容 | 贴片电容(MLCC) |
1 | 10nF | 10nF | 电容 | 贴片电容(MLCC) |
1 | HX25003-2WAP | / | 连接器 | 线对板/线对线连接器 |
1 | A1251WR-2P | / | 连接器 | 线对板/线对线连接器 |
1 | PZ254V-11-04P | / | 连接器 | 排针 |
1 | NCD0805R1 | / | 光耦/LED/数码管/光电器件 | 发光二极管/LED |
1 | 1MΩ | 1MΩ | 电阻 | 贴片电阻 |
2 | 10kΩ | 10kΩ | 电阻 | 贴片电阻 |
1 | 510Ω | 510Ω | 电阻 | 贴片电阻 |
1 | TS-1101-C-W | / | 按键/开关 | 轻触开关 |
1 | STM32F103C8T6 | / | 单片机/微控制器 | 单片机(MCU/MPU/SOC) |
1 | DS18B20U | / | 传感器 | 温度传感器 |
1 | AMS1117-3.3 | / | 电源芯片 | 线性稳压器(LDO) |
1 | DRV8833PWP | / | 电源芯片 | 电机驱动芯片 |
1 | U262-161N-4BVC11 | 连接器 | USB连接器 | |
1 | 8MHz | 8MHz | 晶振/振荡器/谐振器 | 无源晶振 |
1 | AFC10-S04QCA-00 | 连接器 | 线对板/线对线连接器 |
六、 软件设计
main.c
#include "delay.h"
#include "sys.h"
#include "led.h"
#include "GX18B20.h"
#include "usart.h"
//#include "DS18B20.h"
int main(void)
{
float temperature = 0;
delay\_init();
uart\_init(9600);
LED\_Init();
DS18B20\_Init();
IN1 = 0;
IN2 = 0;
MOTOR = 0;
while(1)
{
temperature = DS18B20\_GetTemperature();
//在此处处理温度值,例如打印到串口或显示屏
#if 1
IN1 = 1;
IN2 = 0;
if(temperature > 35.00)
{
BEEP =0; //PC13
MOTOR = 1;
}
else
{
BEEP =1; //PC13
MOTOR = 0;
}
#else
MOTOR = 1;
#endif
printf("温度=%.2f\r\n",temperature);
delay\_ms(500);
delay\_ms(500);
}
}
GX18B20.c
#include "GX18B20.h"
#include "delay.h"
// 初始化函数
void GPIO\_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 使能GPIO时钟
RCC\_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 配置引脚为推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO\_Init(GPIO_PORT, &GPIO_InitStructure);
// 默认拉低总线
GPIO\_ResetBits(GPIO_PORT, GPIO_PIN);
}
// 发送复位脉冲
void OW\_Reset(void)
{
// 拉低总线至少480us
GPIO\_ResetBits(GPIO_PORT, GPIO_PIN);
delay\_us(500);
// 释放总线
GPIO\_SetBits(GPIO_PORT, GPIO_PIN);
delay\_us(60);
// 等待设备拉低总线
while (GPIO\_ReadInputDataBit(GPIO_PORT, GPIO_PIN) == Bit_RESET);
}
// 发送一个字节
void OW\_WriteByte(uint8\_t byte)
{
uint8\_t i;
for (i = 0; i < 8; i++)
{
// 拉低总线至少1us
GPIO\_ResetBits(GPIO_PORT, GPIO_PIN);
delay\_us(2);
// 发送数据位
if (byte & 0x01)
{
GPIO\_SetBits(GPIO_PORT, GPIO_PIN);
}
else
{
GPIO\_ResetBits(GPIO_PORT, GPIO_PIN);
}
// 拉高总线,释放总线
delay\_us(60);
GPIO\_SetBits(GPIO_PORT, GPIO_PIN);
delay\_us(2);
// 移位
byte >>= 1;
}
}
// 读取一个字节
uint8\_t OW\_ReadByte(void)
{
uint8\_t byte = 0;
uint8\_t i;
for ( i = 0; i < 8; i++)
{
// 拉低总线至少1us
GPIO\_ResetBits(GPIO_PORT, GPIO_PIN);
delay\_us(2);
// 拉高总线,释放总线
GPIO\_SetBits(GPIO_PORT, GPIO_PIN);
delay\_us(2);
// 读取数据位
if (GPIO\_ReadInputDataBit(GPIO_PORT, GPIO_PIN))
{
byte |= (1 << i);
}
// 等待余下的时隙结束
delay\_us(60);
}
return byte;
}
// 初始化函数
void DS18B20\_Init(void)
{
// 配置GPIO
GPIO\_Configuration();
}
// 获取温度
float DS18B20\_GetTemperature(void)
{
uint8\_t temp_LSB, temp_MSB;
int16\_t temp;
// 发送复位脉冲
OW\_Reset();
// 发送跳过ROM指令
OW\_WriteByte(0xCC);
// 发送温度转换指令
OW\_WriteByte(0x44);
// 等待转换完成
while (!GPIO\_ReadInputDataBit(GPIO_PORT, GPIO_PIN));
// 发送复位脉冲
OW\_Reset();
// 发送跳过ROM指令
OW\_WriteByte(0xCC);
// 发送读取温度指令
OW\_WriteByte(0xBE);
// 读取温度数据
temp_LSB = OW\_ReadByte();
temp_MSB = OW\_ReadByte();
// 计算温度值
temp = (temp_MSB << 8) | temp_LSB;
return (float)temp / 16.0f;
}
GX18B20.h
#ifndef \_\_GX18B20\_H
#define \_\_GX18B20\_H
#include "sys.h"
#include "stdlib.h"
#include "stm32f10x.h"
#include "delay.h"
// 定义引脚号
#define GPIO\_PORT GPIOA
#define GPIO\_PIN GPIO\_Pin\_0
extern void DS18B20\_Init(void);
extern float DS18B20\_GetTemperature(void);
#endif
led.c
#include "led.h"
void LED\_Init(void)
{
//LED
GPIO_InitTypeDef GPIO_InitStructure;
RCC\_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); //使能3端口时钟
GPIO\_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
//GPIO\_PinRemapConfig(GPIO\_Remap\_SWJ\_JTAGDisable, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
GPIO\_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOC
GPIO\_SetBits(GPIOC,GPIO_Pin_14);
//蜂鸣器
RCC\_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); //使能3端口时钟
GPIO\_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
GPIO\_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOC
GPIO\_SetBits(GPIOC,GPIO_Pin_13);
## 最后
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**
**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/ea0e4db5c39f54e03ea8cfe9d88478d4.png)
![img](https://img-blog.csdnimg.cn/img_convert/d039d43d1da616b5ba6f66f7d179ff8e.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/e6a23d1ff370ae2c2c37e435b75e22fc.png)
![img](https://img-blog.csdnimg.cn/img_convert/59361afcda54232eb5b2122ac5a5cac6.png)
![img](https://img-blog.csdnimg.cn/img_convert/c8901bdd8f8955151003620b3af45789.png)
![img](https://img-blog.csdnimg.cn/img_convert/f80f02d383a684abcb3625018afbb2b2.png)
![](https://img-blog.csdnimg.cn/img_convert/c5fbbd3d068bf17813f1a0b6808640f7.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!
664849)]
[外链图片转存中...(img-V4REyYEn-1715683664849)]
[外链图片转存中...(img-NYTRCo2m-1715683664850)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!