首页 > 代码库 > 上海交大项目
上海交大项目
接收板
硬件部分
测试:
输出io 正常
????????输入io 正常
PWM波 正常
继电器 正常
????????串口 1、3正常,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表示1,0V表示0,而电脑串口输出为RS232电平,是负逻辑电平:-15~-3表示逻辑1;+15~+3表示逻辑0;电压值通常在7V左右。故须进行电平转换。
电平转换采用芯片:MAX3232CSE。
电路:
收发通过一个跳线帽接到一个2*10的牛角座(具有方向性,方便用户安插)上。
注意:跳线帽的作用,因为不确定从电脑输出的DB9接口段的收发管脚位置,故留出一跳线帽区域,方便调整串口连接。
牛角座通过一FC10P 2.54转DB9线引出,再通过一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公头的定义,母头的收发管脚与其相反,即2为TXD,3为RXD。为了保证电脑端的usb转DB9无论是公投还是母头电路板的串口均能兼容,而不用改变电路,故设置一个跳线帽切换模块。在串口连接前,最好验证一下电脑是通过DB9的那个引脚输出信号的,可通过串口助手通过电脑循环发送已制定数据,然后通过示波器查看那个管脚有波形输出,则该管脚即为电脑端发送端。继而可推算知道跳线帽该如何接。
电路板串口的问题:
发送板和接收板的外接串口1、3的外接2*5端子接线有误,牛角座的管脚序号与DB9并不是一一对应的,而是具有如下的关系:
重点关注DB9的2、3、5三个接口的连接关系。
如正确设置了连线关系,则电脑USB转串口采用DB9公头时,跳线帽接在2、4和3、5两组管脚上,采用母头时,跳线帽接在1、3和4、6两组管脚上。
继电器
型号: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) 正常
4路AD 正常
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]; //枚举数组,
枚举的具体细节可网上查找,博客园里也收藏有相关文章。
上海交大项目