目录
简介
该项目主要是用语音模块通过串口usart去控制stm32单片机,然后再用stm32去控制其余的一些传感器和一些执行器
硬件
- 1.8tft屏幕
- dht11温湿度模块
- l293d
- mini_mp3模块
- su-03t模块
- stm32
- 舵机
- 继电器
软件
- led初始化
- tft初始化
- 舵机初始化
- l293d初始化
- 设置pwm
- lcd初始化
- mini_mp3初始化
模块介绍
stm32
使用的是stm32f103c8t6
1.8tft屏幕
该模块主要的工作是显示各个功能的状态
lcd.c文件
----------------------------------------------
//首先是初始化
void lcd_gpio_init(void)
{
gpio_inittypedef gpio_initstructure;
rcc_apb2periphclockcmd(rcc_apb2periph_gpiob, enable);
gpio_initstructure.gpio_pin = gpio_pin_10 | gpio_pin_11 | gpio_pin_12 | gpio_pin_13 | gpio_pin_14 | gpio_pin_15;
gpio_initstructure.gpio_mode = gpio_mode_out_pp;
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_init(gpiob, &gpio_initstructure);
gpio_setbits(gpiob, gpio_pin_10 | gpio_pin_11 | gpio_pin_12 | gpio_pin_13 | gpio_pin_14 | gpio_pin_15);
}
//其次就是各种各样的函数,看资料给的例程
-----------------------------------------------
lcd.h文件
#define lcd_sclk_clr() gpio_resetbits(gpiob,gpio_pin_10)//scl=sclk
#define lcd_sclk_set() gpio_setbits(gpiob,gpio_pin_10)
#define lcd_mosi_clr() gpio_resetbits(gpiob,gpio_pin_11)//sda=mosi
#define lcd_mosi_set() gpio_setbits(gpiob,gpio_pin_11)
#define lcd_res_clr() gpio_resetbits(gpiob,gpio_pin_15)//res
#define lcd_res_set() gpio_setbits(gpiob,gpio_pin_15)
#define lcd_dc_clr() gpio_resetbits(gpiob,gpio_pin_14)//dc
#define lcd_dc_set() gpio_setbits(gpiob,gpio_pin_14)
#define lcd_cs_clr() gpio_resetbits(gpiob,gpio_pin_13)//cs1
#define lcd_cs_set() gpio_setbits(gpiob,gpio_pin_13)
#define lcd_blk_clr() gpio_resetbits(gpiob,gpio_pin_12)//blk
#define lcd_blk_set() gpio_setbits(gpiob,gpio_pin_12)
void lcd_gpio_init(void);
void lcd_writ_bus(u8 dat);
void lcd_wr_data8(u8 dat);
void lcd_wr_data(u16 dat);
void lcd_wr_reg(u8 dat);
void lcd_address_set(u16 x1, u16 y1, u16 x2, u16 y2);
void lcd_init(void);
-----------------------------------------------------------------------
介绍硬件的连线,根据.h文件的定义:
gnd---g
vcc---5v (这里最好是5v,3.3v可能驱动不了)
scl---pb10
sda---pb11
res---pb15
dc---pb14
cs---pb13
blk---pb12
dht11温湿度模块
该模块主要是读取温湿度的数据,然后传递给stm32单片机显示
dht11.c
---------------------------------------------------------
//dht11初始化
u8 dht11_init(void)
{
gpio_inittypedef gpio_initstructure;
rcc_apb2periphclockcmd(rcc_apb2periph_gpioa, enable);
gpio_initstructure.gpio_pin = gpio_pin_1;
gpio_initstructure.gpio_mode = gpio_mode_out_pp;
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_init(gpioa, &gpio_initstructure);
gpio_setbits(gpioa, gpio_pin_1);
dht11_rst();
return dht11_check();
}
//dht11复位
void dht11_rst(void)
{
dht11_io_out();
dht11_dq_out = 0;
delay_ms(20);
dht11_dq_out = 1;
delay_us(30);
}
//dht11检测
u8 dht11_check(void)
{
u8 retry = 0;
dht11_io_in();
while (dht11_dq_in && retry < 100)
{
retry++;
delay_us(1);
};
if(retry >= 100)return 1;
else retry = 0;
while (!dht11_dq_in && retry < 100)
{
retry++;
delay_us(1);
};
if(retry >= 100)return 1;
return 0;
}
//dht11读bit
u8 dht11_read_bit(void)
{
u8 retry = 0;
while(dht11_dq_in && retry < 100) 、
{
retry++;
delay_us(1);
}
retry = 0;
while(!dht11_dq_in && retry < 100) 、
{
retry++;
delay_us(1);
}
delay_us(40);
、 if(dht11_dq_in)return 1;
else return 0;
}
//dht11读byte
u8 dht11_read_byte(void)
{
u8 i, dat;
dat = 0;
for (i = 0; i < 8; i++)
{
dat <<= 1;
dat |= dht11_read_bit();
}
return dat;
}
//dht11读数据
u8 dht11_read_data(u8 *temp, u8 *humi)
{
u8 buf[5];
u8 i;
dht11_rst();
if(dht11_check() == 0)
{
for(i = 0; i < 5; i++)
{
buf[i] = dht11_read_byte();
}
if((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4])
{
*humi = buf[0];
*(humi + 1) = buf[1];
*temp = buf[2];
*(temp + 1) = buf[3];
}
}
else return 1;
return 0;
}
----------------------------------------------------------------
dht11.h
----------------------------------------------------------------
#ifndef __dht11_h
#define __dht11_h
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "usart2.h"
#include "lcd.h"
#include "lcd_init.h"
#define dht11_io_in() {gpioa->crl&=0xffffff0f;gpioa->crl|=8<<4;}
#define dht11_io_out() {gpioa->crl&=0xffffff0f;gpioa->crl|=3<<4;}
#define dht11_dq_out paout(1)
#define dht11_dq_in pain(1)
u8 dht11_init(void);
u8 dht11_read_data(u8 *temp, u8 *humi);
u8 dht11_read_byte(void);
u8 dht11_read_bit(void);
u8 dht11_check(void);
void dht11_rst(void);
void su03t_dht11_play(void);
void mp3_dht11_play(void);
#endif
-----------------------------------------------------------------
根据gpio的定义开始连线:
data---pa1
mini_mp3模块
该模块的工作主要是存储语音文件,当语音模块给stm32发送指令时,stm32再把指令传递给该模块,然后该模块开始工作,发出声音。
该模块主要是通过串口来和stm32通讯,所以没有特定的.c和.h的文件,下面介绍该模块会用到的一些函数。
-----------------------------------------------------------------
该函数主要是stm32给mp3模块发送数据
void uart2_mp3_senddata(int len)
{
int i = 0 ;
usart2_sendbyte(0x7e);
for(i = 0; i < len; i++)
{
usart2_sendbyte(send_buf[i]);
}
usart2_sendbyte(0xef);
}
该函数主要是mp3播放文件里面的内容
void uart2_mp3_sendcmd(int cmd, int feedback, int dat)
{
send_buf[0] = 0xff;
send_buf[1] = 0x06;
send_buf[2] = cmd;
send_buf[3] = feedback;
send_buf[4] = (int)(dat >> 8);
send_buf[5] = (int)(dat);
uart2_mp3_dosum(&send_buf[0], 6);
uart2_mp3_senddata(8);
}
void uart2_mp3_sendcmd2(int cmd, int dat1, int dat2, int dat3)
{
send_buf[0] = 0xff;
send_buf[1] = 0x06;
send_buf[2] = cmd;
send_buf[3] = (int)(dat1);
send_buf[4] = (int)(dat2);
send_buf[5] = (int)(dat3);
uart2_mp3_senddata(6);
}
-------------------------------------------------------------------
引脚的接线:
mp3的rx---stm32的tx
vcc--3.3v
gnd--gnd
su-03t模块
这是本项目的语音模块,主要是通过麦克风来接受语音,然后通过串口把数据传递给smt32
串口2向su-03t发送命令
-----------------------------------------------------------
void uart2_su03t_sendcmd(int len)
{
int i = 0 ;
usart2_sendbyte(0xaa);
usart2_sendbyte(0x55);
for(i = 0; i < len; i++)
{
usart2_sendbyte(send_buf[i]);
}
usart2_sendbyte(0x55);
usart2_sendbyte(0xaa);
}
------------------------------------------------------------
串口2向su-03t发送命令(3位数据)
------------------------------------------------------------
void uart2_su03t_sendcmd1(int dat1, int dat2, int dat3)
{
send_buf[0] = (int)(dat1); //datal
send_buf[1] = (int)(dat2); //data2
send_buf[2] = (int)(dat3); //data3
uart2_su03t_sendcmd(3);
}
------------------------------------------------------------
发表评论