首页 > 代码库 > 上海交大项目

上海交大项目

接收板

硬件部分

测试:

输出io 正常

????????输入io 正常

PWM 正常

继电器 正常

????????串口 13正常,2max232芯片引脚连线有问题

温湿度模块 正常

????????GPS模块 数据解码有问题

输出与输入:

采用芯片:SN74LVC8T245PW

作用:电平转换

245dir为低,数据B--A,为高,数据A--B

输入:

技术分享

测试方法:硬件,将B1接高电平5v,用万用表测试A1管脚是否输出高电平3.3v,再将B1接低电平,用万用表测试A1管脚是否输出低电平,如均符合要求,则当前正常;依次测试后面的管脚。

软件:编写单片机读取A1管脚程序,进入调试模式,全速运行,如B1输入高,则单片机读取值为1,输入为低,读取值则为0。符合要求,则读取无误。其余管脚同。可用一数组把所有管脚一齐读入。注意,只有输入为高的管脚读取值必须为1,输入为低的读取值必须为0,对于输入管脚悬空的情况,读取值可能为1,也可能为0.

输出:

技术分享

测试:编写单片机管脚输出程序,对测试管脚先输出1,如A1,则用万用表测试对应的输出管脚B1应为高电平5V,单片机输出0,则B1应为0V

PWM波:

光耦

技术分享

型号:TLP521-4

作用:光电耦合器

电路:

技术分享

功能描述:

设定指定占空比的pwm波并通过程序输出,stm32输出的pwm波为3.3V,需通过光耦高电平用示波器测试输出端信号波形即可。

注意:光电耦合器有最大工作频率,单片机输出pwm波频率太高的话,经过光耦后输出波形会失真。本次采用的芯片最大不失真频率约为5kHz

串口:

若串口通过USB接口与电脑相连,因为stm32输出为TTL电平,电平3.3V表示10V表示0,而电脑串口输出为RS232电平,是负逻辑电平:-15~-3表示逻辑1+15~+3表示逻辑0;电压值通常在7V左右。故须进行电平转换。

电平转换采用芯片:MAX3232CSE

电路:

技术分享

收发通过一个跳线帽接到一个2*10的牛角座(具有方向性,方便用户安插)上。

注意:跳线帽的作用,因为不确定从电脑输出的DB9接口段的收发管脚位置,故留出一跳线帽区域,方便调整串口连接。

技术分享

牛角座通过一FC10P 2.54DB9线引出,再通过一USB-serial转接线连到电脑段。

注意:单片机的发送端(Tx)接电脑端的接收端(Rx),电脑端的发送端(Tx)接单片机的接收端(Rx),千万不能搞反!

DB9接口标准定义:

串行口常用的三根线(TXD RXD GND),有这三根就可以读写数据了。

?技术分享

9

信号方向来自

缩写

描述

1

调制解调器

CD

载波检测

2

调制解调器

RXD

接收数据

3

PC

TXD

发送数据

4

PC

DTR

数据终端准备好

5

??

GND

信号地

6

调制解调器

DSR

通讯设备准备好

7

PC

RTS

请求发送

8

调制解调器

CTS

允许发送

9

调制解调器

RI

响铃指示器

????

上述是DB9公头的定义,母头的收发管脚与其相反,即2TXD3RXD。为了保证电脑端的usbDB9无论是公投还是母头电路板的串口均能兼容,而不用改变电路,故设置一个跳线帽切换模块。在串口连接前,最好验证一下电脑是通过DB9的那个引脚输出信号的,可通过串口助手通过电脑循环发送已制定数据,然后通过示波器查看那个管脚有波形输出,则该管脚即为电脑端发送端。继而可推算知道跳线帽该如何接。

电路板串口的问题:

发送板和接收板的外接串口13的外接2*5端子接线有误,牛角座的管脚序号与DB9并不是一一对应的,而是具有如下的关系:

技术分享

重点关注DB9235三个接口的连接关系。

如正确设置了连线关系,则电脑USB转串口采用DB9公头时,跳线帽接在2435两组管脚上,采用母头时,跳线帽接在1346两组管脚上。

继电器

技术分享

型号:HK19F-DC5V-SHG

功能:开关

电路:

技术分享

描述:平时单片机控制管脚输出低电平,三极管不导通,集电极为高阻态,集电极无电流流过,com端和close闭合,可通过万用表短路测试来验证。单片机输出高电平,则三极管基极和发射极导通,集电极输出低电平。集电极导通(会听到的一声),con端和open端闭合,可用万用表测试。

温湿度模块

GPS模块

软件部分

输入IO

示例程序

void Init(void) //IO初始化

{

?

????GPIO_InitTypeDef GPIO_InitStructureD; //定义GPIO配置结构体

????RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//使能PORTD时钟

????GPIO_InitStructureD.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15;???? //管脚声明

????GPIO_InitStructureD.GPIO_Mode = GPIO_Mode_IPU;???????????? //输入模式,上拉输入????????????

GPIO_Init(GPIOD, &GPIO_InitStructureD);???????????????????? //GPIO初始化

}

?

t[0]=GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_14); //读,GPIO输入,并赋值给相应的变量

t[1]=GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_15);

?

扩展:stm32四种输入模式

上拉输入

下拉输入

浮空输入

模拟输入

输出IO

示例程序

void Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

????RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//时钟使能

????GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //管脚配置

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ???????? //推挽输出

????GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;???? //IO口速度为50MHz

????GPIO_Init(GPIOC, &GPIO_InitStructure); //GPIO初始化

}

?

GPIO_ResetBits(GPIOC,GPIO_Pin_10); //输出低电平

//GPIO_SetBits(GPIOC,GPIO_Pin_10); //输出高电平

?

扩展:stm32四种输出模式

开漏输出

推挽输出

复用功能的开漏输出

复用功能的推挽输出

?

3种输出速度

2MHz

10MHz

50MHz

温湿度模块

PWM

配置输出管脚

stdarg.h stdarg是由standard(标准) arguments(参数)简化而来,主要目的为让函数能够接收可变参数

?

发送板

硬件部分

测试:

8路输入IO 正常

8路输出IO 正常

6个按键(相当于输入IO 正常

4AD 正常

3个串口 正常

?

按键:

电路:

技术分享

功能描述:

KEY[1-6]接到单片机管脚上,单片机通过读取管脚输入即可确定按键状态。

AD

技术分享

AD1、2接单片机,注意设置单片机管脚输入模式为模拟输入。

软件部分

?

16.6.26、28

主要工作:下载调试代码,测试上海交通大学项目的电路板发送、接收板功能

?

?

?

?

?

?

6.30发送板整体测试

发送板装入机盒,焊接连线测试。

一、焊接发送板到机盒顶按键、摇杆的连线时,引脚最好表贴的按键、摇杆的接线端,且线头方向为竖直,因为取下机盒顶盖时一般是垂直上下去放,这样可以减轻接线端的扭折程度,使其不会很快被折断;

二、摇杆连线数据如下:

摇杆1 左摇杆 左右 AD6 PA7 channel7

上下 AD5 PA6 channel6

摇杆2 右摇杆 左右 AD2 PA1 channel1

上下 AD1 PA0 channel0

通过串口助手输出数据:

同时往上推:

右摇杆上下volt:3.295972v

右摇杆左右volt:1.665308v

左摇杆上下volt:0.000806v

左摇杆左右volt:1.600049v

同时往下推:

右摇杆上下volt:0.000806v

右摇杆左右volt:1.625830v

左摇杆上下volt:3.297583v

左摇杆左右volt:1.590381v

同时往左推:

右摇杆上下volt:1.711231v

右摇杆左右volt:0.000806v

左摇杆上下volt:1.571045v

左摇杆左右volt:0.019336v

同时往右推:

右摇杆上下volt:1.759570v

右摇杆左右volt:3.296777v

左摇杆上下volt:1.392993v

左摇杆左右volt:3.295972v

测试正常。

三、指示灯连线数据如下:

从左往右数:

通信指示灯 3 LED_NEW1 PC4 正常

备用指示灯 2 LED_NEW2 PB13 正常

电源指示灯 1 正常

四、按键

从上往下,从左往右

外部按键依次接单片机上按键1~6 对应单片机上的PF5~0 正常

?

?

7.01

一、整合发送板代码,重点是发送板与接收板之间的串口通讯,读发帧头是关键,

进度:发送板发送数据部分代码已经写好;接收数据部分,读帧头部分完成,数据接收完成,对接收数据的处理未写

接受板代码尚未整合

额外任务

更改驱动名为制定公司的名称

驱动:Silicon Labs CP210x USB to UART Bridge Driver

失败!

驱动名配置在.inf文件里,但驱动程序可能对文件进行校验,文件一有改动随即失效,是驱动不能正常安装。

?

7.02

整合接收板代码

继电器,正常状态下,com与close相连,输入高电平,与open相连

接收板代码整合完成,整体功能测试正常

?

一、自己编写的子模块最好放到一同一的文件夹下面,可命名为HARDWARE或者SYSTEM或者其他,并在该文件夹下面新建两个子文件:inc存放头文件(.h),src存放函数实现文件(.c),

当需要给工程文件夹添加新文件时,右键单击要添加的组(group),在src中寻找文件,同时将inc目录的路径添加到如下工程选项中。

技术分享

二、对于函数文件的编写。

要有文件头、文件尾。函数定义前面要加函数说明。注释位置最好统一。一个子函数代码最好不超过20行,太多的话则分散成几个小点的子函数。

一块代码为实现一个功能紧挨着放一起,注释在第一行代码上方,采用/*功能说明*/格式,单行语句注释在语句后面,采用"//语句功能说明 "格式。

三、枚举的使用

对于状态取值有固定范围的变量,如某些外设,如输入端口、输出端口、继电器通断,可通过定义枚举变量表示这些状态。注意,可以定义枚举内部不同状态名间以逗号相隔,切最后一个不加逗号。为方便使用枚举,或者结构体,可用typedef为其定义一个别名。注意,可以定义枚举型数组:

typedef enum

{

????CLOSE,

OPEN

} Relay_Type; //继电器状态

Relay_Type relay[4]; //枚举数组,

枚举的具体细节可网上查找,博客园里也收藏有相关文章。

上海交大项目