在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → STM32串口IAP app调试工具源码

STM32串口IAP app调试工具源码

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:5.37M
  • 下载次数:53
  • 浏览次数:821
  • 发布时间:2018-08-16
  • 实例类别:Android平台开发
  • 发 布 人:350569854
  • 文件格式:.rar
  • 所需积分:2
 相关标签: STM32

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】


package cn.wch.ch34xuartdriver;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import cn.wch.ch34xuartdemo.R;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.hardware.usb.UsbManager;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import android.util.Log;
import cn.wch.ch34xuartdriver.utils.FileUtil;
import cn.wch.ch34xuartdriver.utils.PermissionUtils;

public class MainActivity extends Activity {

	public static final String TAG = "cn.wch.wchusbdriver";
	private static final String ACTION_USB_PERMISSION = "cn.wch.wchusbdriver.USB_PERMISSION";
	public readThread handlerThread;
	protected final Object ThreadLock = new Object();
	private EditText readText;
	private Spinner baudSpinner,stopSpinner,dataSpinner,paritySpinner,sp_file;
	private boolean isOpen;
	private Handler handler;
	private int retval;
	private MainActivity activity;
	private Button writeButton, openButton, clearButton,bthRefresh,btnBoot;
	private EditText txt_rec;
	private MyBtnClicker myBtnClicker=new MyBtnClicker();
	public byte[] writeBuffer,readBuffer;
	public int actualNumBytes, numBytes,status;
	public byte count;
	public byte writeIndex = 0;
	public byte readIndex = 0;
	public int baudRate;
	public byte stopBit,dataBit,parity,flowControl;
	public boolean isConfiged = false;
	public boolean READ_ENABLE = false;
	public SharedPreferences sharePrefSettings;
	public String act_string,mPath,Str,path;;
	public int totalrecv;
	public byte[] datatosend;    public FileInputStream fs;
	int packet_zheng,packet_yu,packet_send=0; boolean boot=false;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		MyApp.driver = new CH34xUARTDriver(
				(UsbManager) getSystemService(Context.USB_SERVICE), this,
				ACTION_USB_PERMISSION);

		PermissionUtils.verifyStoragePermissions(this);
		mPath = Environment.getExternalStorageDirectory().getAbsolutePath().toString()   "/" "iap" "/";
		File floder=new File(mPath);
		if(!floder.exists())
		{
			floder.mkdirs();
			Log.d(TAG, "onCreate: iap文件夹创建成功");
		}
		else
		{
			Log.d(TAG, "onCreate: iap文件夹已经存在");
		}
		bindID();
		bindListener();
		initUI();
		if (!MyApp.driver.UsbFeatureSupported())// 判断系统是否支持USB HOST
		{
			Dialog dialog = new AlertDialog.Builder(MainActivity.this)
					.setTitle("提示")
					.setMessage("您的手机不支持USB HOST,请更换其他手机再试!")
					.setPositiveButton("确认",
							new DialogInterface.OnClickListener() {

								@Override
								public void onClick(DialogInterface arg0,
										int arg1) {
									System.exit(0);
								}
							}).create();
			dialog.setCanceledOnTouchOutside(false);
			dialog.show();
		}
		getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// 保持常亮的屏幕的状态
		writeBuffer = new byte[512];
		readBuffer = new byte[512];
		isOpen = false;
//		writeButton.setEnabled(false);
		activity = this;
		handler = new Handler() {

			public void handleMessage(Message msg) {
				readText.setText((String) msg.obj);
//				readText.append((String) msg.obj);
			}
		};
	}
	
	public void onResume() {
		super.onResume();
		if(!MyApp.driver.isConnected()) {
			int retval = MyApp.driver.ResumeUsbPermission();
			if (retval == 0) {
	
			} else if (retval == -2) {
				Toast.makeText(MainActivity.this, "获取权限失败!",
						Toast.LENGTH_SHORT).show();	
			}
		}
	}
	//处理界面
	private void initUI() {
		openButton.setEnabled(true);
		btnBoot.setEnabled(false);
		writeButton.setEnabled(false);
        //--------------------sp_file------------------------------
		sp_file=(Spinner)findViewById(R.id.sp_file);
		refreshSpinner();
        //---------------------baudRate---------------------------
		baudSpinner = (Spinner) findViewById(R.id.baudRateValue);
		ArrayAdapter<CharSequence> baudAdapter = ArrayAdapter
				.createFromResource(this, R.array.baud_rate,
						R.layout.my_spinner_textview);
		baudAdapter.setDropDownViewResource(R.layout.my_spinner_textview);
		baudSpinner.setAdapter(baudAdapter);
		baudSpinner.setGravity(0x10);
		baudSpinner.setSelection(9);
		/* by default it is 115200 */
		baudRate = 115200;
		//-------------------------------------------------------

		/* ---------------------stop bits---------------------- */
		stopSpinner = (Spinner) findViewById(R.id.stopBitValue);
		ArrayAdapter<CharSequence> stopAdapter = ArrayAdapter
				.createFromResource(this, R.array.stop_bits,
						R.layout.my_spinner_textview);
		stopAdapter.setDropDownViewResource(R.layout.my_spinner_textview);
		stopSpinner.setAdapter(stopAdapter);
		stopSpinner.setGravity(0x01);
		/* default is stop bit 1 */
		stopBit = 1;

		/* ----------------------data bits----------------------- */
		dataSpinner = (Spinner) findViewById(R.id.dataBitValue);
		ArrayAdapter<CharSequence> dataAdapter = ArrayAdapter
				.createFromResource(this, R.array.data_bits,
						R.layout.my_spinner_textview);
		dataAdapter.setDropDownViewResource(R.layout.my_spinner_textview);
		dataSpinner.setAdapter(dataAdapter);
		dataSpinner.setGravity(0x11);
		dataSpinner.setSelection(3);
		/* default data bit is 8 bit */
		dataBit = 8;
		/* parity */
		paritySpinner = (Spinner) findViewById(R.id.parityValue);
		ArrayAdapter<CharSequence> parityAdapter = ArrayAdapter
				.createFromResource(this, R.array.parity,
						R.layout.my_spinner_textview);
		parityAdapter.setDropDownViewResource(R.layout.my_spinner_textview);
		paritySpinner.setAdapter(parityAdapter);
		paritySpinner.setGravity(0x11);
		/* default is none */
		parity = 0;
		/* set the adapter listeners for baud */
		baudSpinner.setOnItemSelectedListener(new MyOnBaudSelectedListener());
		/* set the adapter listeners for stop bits */
		stopSpinner.setOnItemSelectedListener(new MyOnStopSelectedListener());
		/* set the adapter listeners for data bits */
		dataSpinner.setOnItemSelectedListener(new MyOnDataSelectedListener());
		/* set the adapter listeners for parity */
		paritySpinner.setOnItemSelectedListener(new MyOnParitySelectedListener());
		return;
	}
	private void refreshSpinner() {
		// 获得指定目录下面的所有文本文件
		ArrayList<File> fileAlllist = FileUtil.getFileList(mPath, new String[]{".bin"});
		if (fileAlllist.size() > 0) {
			fileArray = new String[fileAlllist.size()];
			for (int i = 0; i < fileAlllist.size(); i  ) {
				fileArray[i] = fileAlllist.get(i).getName();
			}
			ArrayAdapter<String> typeAdapter = new ArrayAdapter<String>(this,
					R.layout.item_select, fileArray);
			typeAdapter.setDropDownViewResource(R.layout.item_dropdown);
			sp_file.setPrompt("请选择文本文件");
			sp_file.setAdapter(typeAdapter);
			sp_file.setSelection(0);
			sp_file.setOnItemSelectedListener(new FileSelectedListener());
		} else {
			fileArray = null;
			fileArray = new String[1];
			fileArray[0] = "";
			ArrayAdapter<String> typeAdapter = new ArrayAdapter<String>(this,
					R.layout.item_select, fileArray);
			sp_file.setPrompt(null);
			sp_file.setAdapter(typeAdapter);
			sp_file.setOnItemSelectedListener(null);
		}
	}

	private void bindID(){
//		readText = (EditText) findViewById(R.id.ReadValues);
		txt_rec=(EditText)findViewById(R.id.txt_rec);
		writeButton = (Button) findViewById(R.id.WriteButton);
		openButton = (Button) findViewById(R.id.open_device);
		clearButton = (Button) findViewById(R.id.clearButton);
		btnBoot=(Button)findViewById(R.id.btn_boot);
		bthRefresh=(Button)findViewById(R.id.btn_refresh);
	}
	private void bindListener(){
		writeButton.setOnClickListener(myBtnClicker);
		openButton.setOnClickListener(myBtnClicker);
		clearButton.setOnClickListener(myBtnClicker);
		btnBoot.setOnClickListener(myBtnClicker);
		bthRefresh.setOnClickListener(myBtnClicker);
	}
	private class MyBtnClicker implements View.OnClickListener{
		@Override
		public void onClick(View view){
			switch (view.getId()){
				case R.id.open_device:
				{
					//打开流程主要步骤为ResumeUsbList,UartInit
					if (!isOpen) {
						retval = MyApp.driver.ResumeUsbList();
						if (retval == -1)// ResumeUsbList方法用于枚举CH34X设备以及打开相关设备
						{
							Toast.makeText(MainActivity.this, "打开设备失败!",
									Toast.LENGTH_SHORT).show();
							MyApp.driver.CloseDevice();
						} else if (retval == 0){
							if (!MyApp.driver.UartInit()) {//对串口设备进行初始化操作
								Toast.makeText(MainActivity.this, "设备初始化失败!",
										Toast.LENGTH_SHORT).show();
								Toast.makeText(MainActivity.this, "打开"  
												"设备失败!",
										Toast.LENGTH_SHORT).show();
								return;
							}
							Toast.makeText(MainActivity.this, "打开设备成功!",
									Toast.LENGTH_SHORT).show();
							MyApp.driver.SetConfig(baudRate, dataBit, stopBit, parity,//配置串口波特率,函数说明可参照编程手册
									flowControl);
							isOpen = true;
							openButton.setText("Close");
							btnBoot.setEnabled(true);
							new readThread().start();//开启读线程读取串口接收的数据
						} else {
							AlertDialog.Builder builder = new AlertDialog.Builder(activity);
							builder.setIcon(R.drawable.icon);
							builder.setTitle("未授权限");
							builder.setMessage("确认退出吗?");
							builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

								@Override
								public void onClick(DialogInterface dialog, int which) {
									// TODO Auto-generated method stub
									System.exit(0);
								}
							});
							builder.setNegativeButton("返回", new DialogInterface.OnClickListener() {

								@Override
								public void onClick(DialogInterface dialog, int which) {
									// TODO Auto-generated method stub
								}
							});
							builder.show();
						}
					} else {
						openButton.setText("Open");
						writeButton.setEnabled(false);
						btnBoot.setEnabled(false);
						isOpen = false;
						try {
							Thread.sleep(200);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						MyApp.driver.CloseDevice();
						totalrecv = 0;
					}
				}
				break;
				case  R.id.btn_clear:
				{
					totalrecv = 0;
					readText.setText("");
				}
				break;
				case R.id.WriteButton:
				{
					try {
						txt_rec.setText("");
						fs = new FileInputStream(path);
						Str="文件共" String.valueOf(fs.available()) "字节" "\n";
						packet_send=0;
						refreshLogView(Str);
						datatosend=new byte[3];
						datatosend[0]=(byte)0x44; datatosend[1]=(byte)0x4d;
						datatosend[2]=(byte)0x46;
						int retval = MyApp.driver.WriteData(datatosend, datatosend.length);
						if (retval < 0)
							Toast.makeText(MainActivity.this, "写失败!",
									Toast.LENGTH_SHORT).show();
					}
					catch (IOException e)
					{
						e.printStackTrace();
					}
				}
				break;
				case R.id.btn_boot:
				{
					datatosend=new byte[7];
					datatosend[0]=(byte)0xe1; datatosend[1]=(byte)0xe2; datatosend[2]=(byte)0xe3;
					datatosend[3]=(byte)0x1e; datatosend[4]=(byte)0x2e; datatosend[5]=(byte)0x0d;
					datatosend[6]=(byte)0x0a;
					int retval = MyApp.driver.WriteData(datatosend, datatosend.length);
					if (retval < 0)
						Toast.makeText(MainActivity.this, "写失败!",
								Toast.LENGTH_SHORT).show();
				}
				break;
			}
		}
	}
	private String[] fileArray;
	class FileSelectedListener implements AdapterView.OnItemSelectedListener {
		public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
			path = mPath   fileArray[arg2];
		}
		public void onNothingSelected(AdapterView<?> arg0) {
		}
	}

	public class MyOnBaudSelectedListener implements OnItemSelectedListener {

		@Override
		public void onItemSelected(AdapterView<?> parent, View view,
				int position, long id) {
			baudRate = Integer.parseInt(parent.getItemAtPosition(position)
					.toString());
		}

		@Override
		public void onNothingSelected(AdapterView<?> parent) {

		}
	}

	public class MyOnStopSelectedListener implements OnItemSelectedListener {

		@Override
		public void onItemSelected(AdapterView<?> parent, View view,
				int position, long id) {
			stopBit = (byte) Integer.parseInt(parent
					.getItemAtPosition(position).toString());
		}

		@Override
		public void onNothingSelected(AdapterView<?> parent) {

		}

	}

	public class MyOnDataSelectedListener implements OnItemSelectedListener {

		@Override
		public void onItemSelected(AdapterView<?> parent, View view,
				int position, long id) {
			dataBit = (byte) Integer.parseInt(parent
					.getItemAtPosition(position).toString());
		}

		@Override
		public void onNothingSelected(AdapterView<?> parent) {

		}

	}

	public class MyOnParitySelectedListener implements OnItemSelectedListener {

		@Override
		public void onItemSelected(AdapterView<?> parent, View view,
				int position, long id) {
			String parityString = new String(parent.getItemAtPosition(position)
					.toString());
			if (parityString.compareTo("None") == 0) {
				parity = 0;
			}

			if (parityString.compareTo("Odd") == 0) {
				parity = 1;
			}

			if (parityString.compareTo("Even") == 0) {
				parity = 2;
			}

			if (parityString.compareTo("Mark") == 0) {
				parity = 3;
			}

			if (parityString.compareTo("Space") == 0) {
				parity = 4;
			}
		}

		@Override
		public void onNothingSelected(AdapterView<?> parent) {

		}
	}

	public class MyOnFlowSelectedListener implements OnItemSelectedListener {

		@Override
		public void onItemSelected(AdapterView<?> parent, View view,
				int position, long id) {
			String flowString = new String(parent.getItemAtPosition(position)
					.toString());
			if (flowString.compareTo("None") == 0) {
				flowControl = 0;
			}

			if (flowString.compareTo("CTS/RTS") == 0) {
				flowControl = 1;
			}
		}

		@Override
		public void onNothingSelected(AdapterView<?> parent) {

		}

	}

	private class readThread extends Thread {

		public void run() {

			byte[] buffer = new byte[4096];
			
			while (true) {
				
				Message msg = Message.obtain();
				if (!isOpen) {
					break;
				}
				int length = MyApp.driver.ReadData(buffer, 4096);
				if (length > 0) {
					totalrecv  = length;
					String recv = String.valueOf(totalrecv); 
					msg.obj = recv;
					handler.sendMessage(msg);
				}
			}
		}
	}


标签: STM32

实例下载地址

STM32串口IAP app调试工具源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警