stm32串口之存储与解析
最近在做一个小项目,需要用stm32串口接受Arduino发送的一个不定长的数据,并且解析数据,执行其中的命令;秉着不在中断中做过多任务的思想,我们将从串口中接受到的字符放到一个数组当中。
定义数组
#define MAX_LENTH 100
#define u8 unsigned char
u8 getCharFromArduino[MAX_LENTH];
串口中断函数
u8 *theNextCharAddress = getCharFromArduino; //指针指向下一个存储位置
void USART1_IRQHandler(void)
{
static u8 n=0;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{ *theNextCharAddress = USART_ReceiveData(USART1); //存储数据
theNextCharAddress++; //指针指向下一个存储位置
if(theNextCharAddress < getCharFromArduino[MAX_LENTH]) //形成一个环形的存储空间
{
//do noting
}
else{theNextCharAddress = GETCHARNUMBER;}
theNextCharAddress = &getCharFromArduino[n];
}
}
主函数中的解析函数
void dealDataFromArduino()
{
static u8 *p = getCharFromArduino; if(p == theNextCharAddress) //解析完毕
{
//Do Nothing
}
else
{
//解析
}
p++; //指针指向下一个解析位置
if(p < &getCharFromArduino[GETCHARNUMBER])
{
//do noting
}
else
{
p = getCharFromArduino;
}
}
这是一种比较简单的接受,处理串口数据的方法;缺点是若存储的速度>>读取的速度时,数据发生了丢失却没有报错;
第一次发博客,希望各路看官批评指导。
stm32串口之存储与解析的更多相关文章
- stm32串口接收中断协议解析
		借鉴了文章:<stm32串口中断接收方式详细比较> 文章地址:http://blog.csdn.net/kevinhg/article/details/40186169 串口的配置这里不做 ... 
- STM32内部flash存储小数——别样的C语言技巧
		今天在进行STM32内部falsh存储的时候,发现固件库历程的函数原型是这样的: 第一个是地址,在我的STM32中是2K一页的,第二个是要写入的数据. 问题就来了,存储一个小数该怎么办呢?固件库给的是 ... 
- stm32串口接收完整的数据包
		参考了文章:<stm32串口中断接收方式详细比较> 文章地址:http://bbs.elecfans.com/jishu_357017_1_1.html 借鉴了第四种中断方式 串口的配置这 ... 
- stm32串口通信实验,一点笔记
		第一次深入学习stm32,花了好长时间才看懂代码(主要是C语言学习不够深入),又花了段时间自己敲了一遍,然后比对教程,了解了利用中断来串口通信的设置方法. 板子是探索版f407,本实验工程把正点原子库 ... 
- STM32—串口使用总结
		文章目录 一.仅向上位机打印调试信息 二.与上位机交互信息 三.作为驱动接口 四.结合DMA接收数据帧 在日常学习中,串口经常作为和上位机通信的接口,进行打印信息方便调试程序,有时也会作为模块的驱动接 ... 
- STM32 串口DMA方式接收(转)
		STM32 是一款基于ARM Cortex-M3内核的32位MCU,主频最高可达72M.最近因为要在车机上集成TPMS功能, 便开始着手STM32的开发工作,STM32F10x系列共有5个串口(USA ... 
- STM32串口寄存器操作(转)
		源:STM32串口寄存器操作 //USART.C /************************************************************************** ... 
- stm32串口通讯问题
		stm32串口通讯问题 在串口试验中,串口通讯不正常,则可能会出现以下问题: 1. 配置完成后,串口没有任何消息打印. 原因:1,端口配置有问题,需要重新检查I/O口的配置 2,接线有问题,检查接线是 ... 
- STM32串口控制步进电机(原创)
		用的42步进电机: 厂家可能不一样,两项四线步进电机,里面有两个线圈.在电机什么电都没有接的情况下,用万用表测量四个管脚:两两短接(或者阻值很小)的为一组,可以分别接A+,a-剩余接B+,B-;顺序可 ... 
随机推荐
- JavaBean基本用法示例(一)
			一.首先创建一个类person,里面有四个成员:name,sex,age,info,添加四个成员所有的set和get方法. package com.kaly.bean; public class pe ... 
- 电脑结构和CPU、内存、硬盘三者之间的关系
			前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ... 
- error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义
			error LNK2005: _DllMain@ 已经在 dllmain.obj 中定义 今天遇到了同样的问题,搜索搜到了这里,后来解决了........ 创建解决方案时,用的是WIN32 DLL,添 ... 
- 12-factor
			简介 如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS).12-Factor 为构建如下的 SaaS 应用提供了方法论: 使用标准化流程自动配置,从而使新的开发者花费 ... 
- git秘钥配置--转
			git是分布式的代码管理工具,远程的代码管理是基于ssh的,所以要使用远程的git则需要ssh的配置.github的ssh配置如下:一 .设置git的user name和email:$ git con ... 
- elasticsearch【更新】操作
			基于上一篇博文基础上,进行es的操作,document的新增比较简单,就不说了,这里主要说说更新操作. 更新操作,有两大类,一个是Replace,一个是Update,就是说一个是替换,一个是更新. 替 ... 
- LeetCode "Design Tic-Tac-Toe"
			We don't have to keep a complete chess board.. just counters! class TicTacToe { vector<int> cn ... 
- osmdroid启程
			osmdroid一个牛逼的开源地图引擎,从今天开始好好研究一下~ 
- 使用asmcmdcp命令把datafile从文件系统移动(move)到asm磁盘组中 针对11gR2
			使用asmcmd cp命令 把datafile从文件系统移动(move)到asm磁盘组中--针对11gR2 参考原文:How to Move a Datafile from Filesystem to ... 
- 15. Linked List Cycle && Linked List Cycle II
			Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up: Can you solve i ... 
