串口

stm32串口收发导致的死机

丶灬走出姿态 提交于 2019-12-01 16:58:21
stm32串口收发导致的死机 很久以前有偶尔遇到过串口死机的情况,那是当时的我写出来的代码自己都觉得有问题,也就没注意。用了stm32做项目以后也就没遇到过了,今天做了个高压测试,每5ms定时发送一次,结果挂了,而且仿真只能看到程序在乱飞。这回认真做了测试分析,得到以下结论。 我认为之所以导致死机的原因是串口中断没办法及时处理外设缓存的数据。因此,在使用串口应注意: 串口中断中,不管是什么数据,先收了再说。 条件允许的话,串口中断设置为抢占优先级。 同等级中断函数中,尽量不占用过多的时间。 来源: https://www.cnblogs.com/wcw12580/p/11694449.html

匿名拓空者Pro开源飞控使用介绍-2-硬件配置及拓展接口

可紊 提交于 2019-12-01 13:48:51
硬件配置 主控 STM32F407 : 1M FLASH,192K RAM,运行频率168MHz; 惯性传感器 icm20602 :3轴陀螺 + 3轴加速度 + 恒温设计(相比MPU6050,icm20602在噪声、零飘等方面均有提升,带来更好的飞行效果) 磁场传感器 ak8975 :3轴磁罗盘 气压传感器 spl06 :高精度气压计,灵敏度5cm。 拓展接口 PWM输入 8路硬件PWM采集,用于接收航模接收机信号 PWM输出 8路硬件PWM输出,用于驱动无刷电机或者舵机等设备 拓展串口 飞控引出5路串口,最多可外接5个串口设备。同时,也可通过修改源码,将串口IO初始化成不同功能,比如gpio、adc、iic等,可以拓展更多设备。 调试接口 1 * SWD:用于下载程序,单步调试等 通信接口 1 * USB:提供一个USB接口,方便连接飞控进行调试 拓展IO 4 * 扩展IO:留给用户,任意使用,方便二次开发、DIY扩展。 接口介绍 串口 串口为4p,如图,丝印为VGTR,从左至右,分别为VCC(5V)、GND、TX、RX,注意,VCC引脚为靠近电调接口一侧。 SWD接口 如图,丝印为DGCN,分别为DIO、GND、CLK、无用IO,也就是说,SWD只能下载用,不能为飞控供电哦,所以在下载时飞控需独立供电。 PWM接收机接口 丝印为-+12345678,分别是GND、VCC(5V

STM32之串口DMA接收不定长数据

风流意气都作罢 提交于 2019-12-01 13:37:59
STM32之串口DMA接收不定长数据 引言 在使用stm32或者其他单片机的时候,会经常使用到串口通讯,那么如何有效地接收数据呢?假如这段数据是不定长的有如何高效接收呢? 同学A:数据来了就会进入串口中断,在中断中读取数据就行了! 中断就是打断程序正常运行,怎么能保证高效呢?经常把主程序打断,主程序还要不要运行了? 同学B:串口可以配置成用DMA的方式接收数据,等接收完毕就可以去读取了! 这个同学是对的,我们可以使用DMA去接收数据,不过DMA需要定长才能产生接收中断,如何接收不定长的数据呢? DMA简介 题外话:其实,上面的问题是很有必要思考一下的,不断思考,才能进步。 什么是DMA DMA :全称Direct Memory Access,即直接存储器访问 DMA 传输将数据从一个地址空间复制到另外一个地址空间。CPU只需初始化DMA即可,传输动作本身是由 DMA 控制器来实现和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。这样的操作并没有让处理器参与处理,CPU可以干其他事情,当DMA传输完成的时候产生一个中断,告诉CPU我已经完成了,然后CPU知道了就可以去处理数据了,这样子提高了CPU的利用率,因为CPU是大脑,主要做数据运算的工作,而不是去搬运数据。DMA 传输对于高效能嵌入式系统算法和网络是很重要的。 在STM32的DMA资源 STM32F1系列

INIT: version 2.88 booting

会有一股神秘感。 提交于 2019-12-01 10:16:07
发现调试串口启动时,INIT: 卡了30s, version 2.88 booting 又卡了30s,通过分析sysvinit代码发现串口执行close时,阻塞到tx_empty函数,在串口驱动中添加uart_update_timeout(port, termios->c_cflag, baud);即可解决这个问题。 下面是具体的分析流程 串口执行close时,最后调用 while (!port->ops->tx_empty(port)) { msleep_interruptible(jiffies_to_msecs(char_time)); if (signal_pending(current)) break; if (time_after(jiffies, expire)) break; } 这个msleep_interruptible就是导致那个30s 来源: https://www.cnblogs.com/yangv/p/11679839.html

3516dv300 开启串口 转载

↘锁芯ラ 提交于 2019-12-01 10:03:22
进入新公司参加的第一个项目,采用的是海思的Hi35xxVxx芯片。 我这边负责的模块是GPS模块,利用SDK代码框架,配置海思Hi35xx 芯片的串口,从串口读取GPS模块数据。 首先第一步,配置内核uart: 通过看芯片数据手册,GPS预留接口是 UART4。但是海思芯片未配置UART4。于是我们得从内核源码树配置UART4。 当然,得基于海思的内核patch 来配置,因为,原生内核是未对hi35xx芯片做适配的。 我们进入:osdrv/opensource/kernel/linux-4.9.y/arch/arm/boot/dts/ 目录 修改patch: diff -Naur linux-4.9.y.sdk/arch/arm/boot/dts/hi3559v200-demb.dts linux-4.9.y/arch/arm/boot/dts/hi3559v200-demb.dts --- linux-4.9.y.sdk/arch/arm/boot/dts/hi3559v200-demb.dts 2019-07-09 07:51:20.578954127 +0000 +++ linux-4.9.y/arch/arm/boot/dts/hi3559v200-demb.dts 2019-07-09 07:52:49.770587238 +0000 @@ -39,6 +39,9 @@

串口通信

冷暖自知 提交于 2019-12-01 08:22:18
/////////////////////// ////这是头文件的代码,主要是定义了一个类 /////////////////////////////// #ifndef SERIALPORT_H_ #define SERIALPORT_H_ #include <process.h> #include "TChar.h" #include <string> #include <sstream> #include <iostream> #include <iomanip> #include <algorithm> #include <iterator> #include <cctype> #include <Windows.h> using namespace std; /** 串口通信类 * * 本类实现了对串口的基本操作 * 例如监听发到指定串口的数据、发送指定数据到串口 */ typedef enum AxisType { AXIS_XX = 2, AXIS_YY = 3, AXIS_ZZ = 1, AXIS_OO = 4, }AXIS_TYPE; class CSerialPort { public: CSerialPort(void); ~CSerialPort(void); public: /** 初始化串口函数 * * @param: UINT portNo 串口编号

AndroidSerialpPort

♀尐吖头ヾ 提交于 2019-12-01 07:59:13
  Android串口通信   一.集成AndroidSerialPort库:     1. allprojects {       repositories {          ... maven { url 'https://jitpack.io ' }           }          }       2.compile 'com.github.kongqw:AndroidSerialPort:1.0.1 '   二、查看串口      SerialPortFinder serialPortFinder = new SerialPortFinder();     ArrayList< Device> devices = serialPortFinder .getDevices();   三、初始化      SerialPortManager mSerialPortManager = new SerialPortManager();   四、打开串口监听     mSerialPortManager .setOnOpenSerialPortListener( new OnOpenSerialPortListener() {        @Override public void onSuccess( File device) {                  

关于串口接收处理数据

…衆ロ難τιáo~ 提交于 2019-12-01 07:37:56
一,处理思路(定时器模拟空闲中断)   判断串口接收到一条完整的数据以后置位一个标志位,主循环判断此标志位处理数据.   如何判断接收到一条完整的数据:     无论做的什么串口通信,数据总是一条一条的发送,发送完一条再发送另一条,发送每一条数据之间存在时间间隔,串口接收数据的时候控制一个     变量在定时器里面累加,同时串口中断接收数据的时候对这个变量清零!如果串口一直接收数据这个变量永远累加不到期望的数值,如果串口接收     数据以后不再接收数据,变量会累加到期望的数值,然后就是判断接收到一条完整的数据. 二,由于每个单片机串口配置的写法不一,只截图说明使用 串口接收到数据时:Usart1ReadCnt++; Usart1IdleCnt = 0; 定时器 判断Usart1ReadCnt !=0 说明串口接收到数据 然后 Usart1IdleCnt++ 如果串口一直接收数据 Usart1IdleCnt将不能累加到 Usart1IdleTime (本程序设置的10) Ms 串口接收完一串数据以后,停了10Ms 没有发过来数据, 则会执行 Usart1IdleCnt = 0; Usart1ReadCntCopy = Usart1ReadCnt; Usart1ReadCnt = 0; Usart1ReadFlage = 1; 三,主循环调用 注意:如果通信时间过短小于10Ms

物联网架构成长之路(37)-基于C#开发串口工具

旧城冷巷雨未停 提交于 2019-12-01 06:57:21
0. 前言   作为物联网平台开发,最基础的工具链还是要有的。前几篇博客,介绍了用C#开发一个MQTT的客户端,用于模拟设备连接平台,并发送数据到平台。但是对于一些硬件来说,可能会用到串口uart来发送数据。然后经过模块,转换为JSON再通过MQTT发往平台。这个适合需要开发一些工具来协助开发。平台固然重要,但是对应的工具链也是比较重要的。 1. 创建虚拟串口   要做一个串口工具,为了方便调试,我们需要安装一个虚拟串口软件。模拟两个串口,然后用标准的串口工具来发送数据,自己开发的工具用来接收数据。    http://www.greenxf.com/soft/213933.html 可以在这里下载破解版。   先安装第二个原版。然后用第一个打开。   打开后,创建虚拟串口 2. C#串口编程   效果图(本工具,不开源,不给代码): 3. 参考代码 1 #region 模块串口功能 2 3 private void btnSerialModulRefresh_Click(object sender, EventArgs e) 4 { 5 string[] names = SerialPort.GetPortNames(); 6 if(names == null || names.Length <= 0) 7 { 8 MessageBox.Show("未找到串口COM