给android设备增加串口功能

本文介绍了如何通过蓝牙转串口板为Android设备添加串口功能。利用STM32F101C8单片机和HC05蓝牙模块,实现与串口设备的连接。单片机用于配置波特率等参数,板子可通过MINI USB或锂电池供电,并具备充电管理功能。虽然未提供上位机程序,但建议在Android市场下载蓝牙串口助手应用进行通讯。
摘要由CSDN通过智能技术生成
               

给android设备增加串口功能


本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.


环境:

主机:WIN7

开发环境:MDK4.23


功能:

打开Android手机或者平台的蓝牙,通过蓝牙连接蓝牙转串口板,通过蓝牙转串口板的串口与需要调试的串口设备相连


说明:

1.PCB为我同学hunter绘制,他同时是stm32的高手,感谢他提供的支持.

2.制作了一个蓝牙转串口的板子,Android设备连接上这个板子,就相当于增加了一个串口.

3.单片机选用的是STM32F101C8,蓝牙模块选用的是HC05.HC05本身就是一个蓝牙转串口模块,再增加一个单片机的作用是可以通过单片机来配置波特率等参数.

4.蓝牙转串口板可以用MINI USB来供电,或者用3.7V锂电池来供电,板子上带有充电管理芯片,由于没锂电池,充电这块还没有测试.

5.上位机程序(Android上的串口助手)暂时没有时间写,可以在安卓市场上搜索"蓝牙串口"下一个串口助手.

6.在上位机发送指定格式可以配置波特率,例:AT+BAUD9600END


实物图:



电路图:

第1部分:

图片较大,部分没有显示.可以在新窗口打开图片来看到全部内容

第2部分:


下位机程序:

public.h

#ifndef _PUBLIC_H_#define _PUBLIC_H_//公共头文件#include "main.h"#include "string.h"#include "stdlib.h"#include "stm32f10x_tim.h"//宏定义#define U8 unsigned char#define U16 unsigned short#define U32 unsigned long//蓝牙转串口的缓存长度#define LEN_BT_STACK  10//蓝牙波特率设置命令#define BT_BAUD_4800 "AT+UART=4800,0,0"#define BT_BAUD_9600    "AT+UART=9600,0,0"#define BT_BAUD_19200 "AT+UART=19200,0,0"#define BT_BAUD_38400 "AT+UART=38400,0,0"#define BT_BAUD_57600 "AT+UART=57600,0,0"#define BT_BAUD_115200 "AT+UART=115200,0,0"#define DEFAULT_BAUD 9600//定义flash页大小#if defined (STM32F10X_HD) || defined (STM32F10X_HD_VL) || (STM32F10X_CL) || defined (STM32F10X_XL)  #define FLASH_PAGE_SIZE    ((uint16_t)0x800)  #define FLASH_PAGES_TO_BE_PROTECTED (FLASH_WRProt_Pages12to13 | FLASH_WRProt_Pages14to15)  #else  #define FLASH_PAGE_SIZE    ((uint16_t)0x400)  //需要关闭写保护的页面  #define FLASH_PAGES_TO_BE_PROTECTED (FLASH_WRProt_Pages60to63)  #endif//定义操作的flash的始末地址63K-64K  #define BANK1_WRITE_START_ADDR  ((uint32_t)0x0800FC00)#define BANK1_WRITE_END_ADDR    ((uint32_t)0x08010000)//数据结构//通过蓝牙发过来的串口2的数据堆栈//数据结构为循环队列,读写缓冲#define LEN_BUF 512struct _FIFO_Stack{
     unsigned char buf[LEN_BUF]; short ptr_r; short ptr_w;};//数据流式符合字符串头检索#define LEN_MATCH_STRING_HEADER 9struct _match_string_header{
     char match[LEN_MATCH_STRING_HEADER]; int state;};//数据流式符合字符串尾检索,并提取数据结构#define LEN_MATCH_STRING_TAIL 3struct _match_string_tail{
     char match[LEN_MATCH_STRING_TAIL]; int state;    //当前状态/下标 int value;    //最后取得的值 int max_len;   //数据最大长度 char capture_string[10]; int capture_index;  //当前捕获数据下标 struct _match_string_header match_string_header; //用来比较尾是否正确 int flag;    //捕获数据状态或是捕获字符尾状态};//修改flashstruct _edit_flash{
     unsigned short buf[512]; int flag;  //判断flash是否被修改过 int baud;  //需要写入/读出的波特率};//公共变量//声明串口结构体extern USART_InitTypeDef USART_InitStructure;//声明FIFO堆栈给UART2使用extern struct _FIFO_Stack fifo_uart2;//声明FIFO堆栈给UART1使用extern struct _FIFO_Stack fifo_uart1;//声明修改flash结构体extern struct _edit_flash edit_flash;//公共函数//按照蓝牙转串口的格式发送指令void send_bt_cmd(char *str);//循环缓冲方法//初始化void init_fifo_stack(struct _FIFO_Stack *stack);//读取全部//成功返回字节数,失败返回-1short read_all_fifo_stack(struct _FIFO_Stack *stack,unsigned char *buf);//写入1个字节//失败返回-1,成功返回1int write_byte_fifo_stack(struct _FIFO_Stack *stack,unsigned char byte);//数据流式符合字符串头检索方法//初始化//成功返回1,失败返回0int init_match_string_header(struct _match_string_header *m_str,char *buf);//返回-1失败,返回0正在运行,返回1成功int match_string_header_state(struct _match_string_header *m_str,char ch);//数据流式符合字符串尾检索,并提取数据结构方法//初始化//成功返回1,失败返回0int init_match_string_tail(struct _match_string_tail *m_str,char *buf,int max_len);//返回-1失败,返回0正在运行,成功返回得到的数据int match_string_tail_state(struct _match_string_tail *m_str,char ch);//flash操作//打开需要操作页面的写保护void open_write_lock();//向flash中写入数据,1024字节,512个半字//成功返回写入的字节数,失败返回-1int write_flash(unsigned short *buf);//读取flash,读取1024字节,512半字//成功返回读取的字节数,失败返回-1int read_flash(unsigned short *buf);//读取flash,获得flag和baud//成功返回波特率,失败返回-1int read_baud(struct _edit_flash *edit);//写入波特率到flash//成功返回1,失败返回0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值