最近在做一些简单的ARM打板子视频实践,我还是个学生,刚刚接触,想通过ARM的串口接收GPS模块实时发送过来的数据

嵌入式arm板子读取串口数据read返回有长度,但是buf为空_百度知道1868人阅读
RS485(3)
& & & 摘要:本文在探讨传统数据收发不足之后,介绍如何使用带FIFO的串口来减少接收中断次数,通过一种自定义通讯协议格式,给出帧打包方法;之后介绍一种特殊的串口数据发送方法,可在避免使用串口发送中断的情况下,提高系统的响应速度。1.& 简介&&&&&& 串口由于使用简单,价格低廉,配合RS485芯片可以实现长距离、抗干扰能力强的局域网络而被广泛使用。随着产品功能的增多,需要处理的任务也越来越复杂,系统任务也越来越需要及时响应。绝大多数的现代单片机(ARM7、Cortex-M3)串口都带有一定数量的硬件FIFO,本文将介绍如何使用硬件FIFO来减少接收中断次数,提高发送效率。在此之前,先来列举一下传统串口数据收发的不足之处:每接收一个字节数据,产生一次接收中断。不能有效的利用串口硬件FIFO,减少中断次数。应答数据采用等待发送的方法。由于串行数据传输的时间远远跟不上CPU的处理时间,等待串口发送完当前字节再发送下一字节会造成CPU资源浪费,不利于系统整体响应(在1200bps下,发送一字节大约需要10ms,如果一次发送几十个字节数据,CPU会长时间处于等待状态)。&应答数据采用中断发送。增加一个中断源,增加系统的中断次数,这会影响系统整体稳定性(从可靠性角度考虑,中断事件应越少越好)。&针对上述的不足之处,将结合一个常用自定义通讯协议,提供一个完整的解决方案。2.& 串口FIFO&&&&&& 串口FIFO可以理解为串口专用的缓存,该缓存采用先进先出方式。数据接收FIFO和数据发送FIFO通常是独立的两个硬件。串口接收的数据,先放入接收FIFO中,当FIFO中的数据达到触发值(通常触发值为1、2、4、8、14字节)或者FIFO中的数据虽然没有达到设定值但是一段时间(通常为3.5个字符传输时间)没有再接收到数据,则通知CPU产生接收中断;发送的数据要先写入发送FIFO,只要发送FIFO未空,硬件会自动发送FIFO中的数据。写入发送FIFO的字节个数受FIFO最大深度影响,通常一次写入最多允许16字节。上述列举的数据跟具体的硬件有关,CPU类型不同,特性也不尽相同,使用前应参考相应的数据手册。3.& 数据接收与打包&&&&&& FIFO可以缓存串口接收到的数据,因此我们可以利用FIFO来减少中断次数。以NXP的lpc1778芯片为例,接收FIFO的触发级别可以设置为1、2、4、8、14字节,推荐使用8字节或者14字节,这也是PC串口接收FIFO的默认值。这样,当接收到大量数据时,每8个字节或者14个字节才会产生一次中断(最后一次接收除外),相比接收一个字节即产生一个中断,这种方法串口接收中断次数大大减少。&&&&&& 将接收FIFO设置为8或者14字节也十分简单,还是以lpc1778为例,只需要设置UART FIFO控制寄存器UnFCR即可。&&&&&& 接收的数据要符合通讯协议规定,数据与协议是密不可分的。通常我们需要将接收到的数据根据协议打包成一帧,然后交由上层处理。下面介绍一个自定义的协议帧格式,并给出一个通用打包成帧的方法。& & & &自定义协议格式如图3-1所示。&帧 首&&地址号&&命令号&&长 度&& & & & & & & & & & & & & & & & & & & &数 & & & & & & & & & & & & & & & & 据 & & & & & & & & & & & & & & & & & & &&校 验&图3-1 公司常用通讯协议格式& 帧首:通常是3~5个0xFF或者0xEE& 地址号:要进行通讯的设备的地址编号,1字节& 命令号:对应不同的功能,1字节& 长度:数据区域的字节个数,1字节& 数据:与具体的命令号有关,数据区长度可以为0,整个帧的长度不应超过256字节& 校验:异或和校验(1字节)或者CRC16校验(2字节),本例使用CRC16校验&&&&&& 下面介绍如何将接收到的数据按照图3-1所示的格式打包成一帧。3.1 定义数据结构1.
typedef struct {
uint8_t * dst_
//指向接收缓存
//帧首标志,为0xFF或者0xEE
uint8_t sfd_
//找到帧首,一般是3~5个FF或EE
uint8_t sfd_
//帧首的个数,一般3~5个
uint8_t received_
//已经接收的字节数
uint8_t find_fram_
//找到完整帧后,置1
uint8_t frame_
//本帧数据总长度,这个区域是可选的
}find_frame_3.2 初始化数据结构,一般放在串口初始化中1.
初始化寻找帧的数据结构
p_fine_frame:指向打包帧数据结构体变量
dst_buf:指向帧缓冲区
sfd:帧首标志,一般为0xFF或者0xEE
void init_find_frame_struct(find_frame_struct * p_find_frame,uint8_t *dst_buf,uint8_t sfd)
p_find_frame-&dst_buf=dst_
p_find_frame-&sfd=
p_find_frame-&find_fram_flag=0;
p_find_frame-&frame_len=10;
p_find_frame-&received_len=0;
p_find_frame-&sfd_count=0;
p_find_frame-&sfd_flag=0;
16. } 3.3 数据打包程序1.
寻找一帧数据
返回处理的数据个数
p_find_frame:指向打包帧数据结构体变量
src_buf:指向串口接收的原始数据
data_len:src_buf本次串口接收到的原始数据个数
sum_len:帧缓存的最大长度
本次处理的数据个数
uint32_t find_one_frame(find_frame_struct * p_find_frame,const uint8_t * src_buf,uint32_t data_len,uint32_t sum_len)
uint32_t src_len=0;
while(data_len--)
if(p_find_frame -&sfd_flag==0)
//没有找到起始帧首
if(src_buf[src_len++]==p_find_frame -&sfd)
p_find_frame -&dst_buf[p_find_frame -&received_len++]=p_find_frame -&
if(++p_find_frame -&sfd_count==5)
p_find_frame -&sfd_flag=1;
p_find_frame -&sfd_count=0;
p_find_frame -&frame_len=10;
p_find_frame -&sfd_count=0;
p_find_frame -&received_len=0;
//是否是&长度&字节? Y-&获取这帧的数据长度
if(7==p_find_frame -&received_len)
p_find_frame-&frame_len=src_buf[src_len]+5+1+1+1+2; //帧首+地址号+命令号+数据长度+校验
if(p_find_frame-&frame_len&=sum_len)
//这里处理方法根据具体应用不一定相同
MY_DEBUGF(SLAVE_DEBUG,(&数据长度超出缓存!\n&));
p_find_frame-&frame_len= sum_
p_find_frame -&dst_buf[p_find_frame-&received_len++]=src_buf[src_len++];
if(p_find_frame -&received_len==p_find_frame -&frame_len)
p_find_frame -&received_len=0;
//一帧完成
p_find_frame -&sfd_flag=0;
p_find_frame -&find_fram_flag=1;
return src_
p_find_frame -&find_fram_flag=0;
return src_
60. } 使用例子:定义数据结构体变量:
find_frame_structslave_find_frame_定义接收数据缓冲区:
#define SLAVE_REC_DATA_LEN
uint8_t slave_rec_buf[SLAVE_REC_DATA_LEN];在串口初始化中调用结构体变量初始化函数:
init_find_frame_struct(&slave_find_frame_srt,slave_rec_buf,0xEE);在串口接收中断中调用数据打包函数:
find_one_frame(&slave_find_frame_srt,tmp_rec_buf,data_len,SLAVE_REC_DATA_LEN);其中,rec_buf是串口接收临时缓冲区,data_len是本次接收的数据长度。&4.& 数据发送&&&&&& 前文提到,传统的等待发送方式会浪费CPU资源,而中断发送方式虽然不会造成CPU资源浪费,但又增加了一个中断源。在我们的使用中发现,定时器中断是几乎每个应用都会使用的,我们可以利用定时器中断以及硬件FIFO来进行数据发送,通过合理设计后,这样的发送方法即不会造成CPU资源浪费,也不会多增加中断源和中断事件。&&&&&& 需要提前说明的是,这个方法并不是对所有应用都合适,对于那些没有开定时器中断的应用本方法当然是不支持的,另外如果定时器中断间隔较长而通讯波特率又特别高的话,本方法也不太适用。公司目前使用的通讯波特率一般比较小(1200bps、2400bps),在这些波特率下,定时器间隔为10ms以下(含10ms)就能满足。如果定时器间隔为1ms以下(含1ms),是可以使用115200bps的。&&&&&& 本方法主要思想是:定时器中断触发后,判断是否有数据要发送,如果有数据要发送并且满足发送条件,则将数据放入发送FIFO中,对于lpc1778来说,一次最多可以放16字节数据。之后硬件会自动启动发送,无需CPU参与。&&&&&& 下面介绍如何使用定时器发送数据,硬件载体为RS485。因为发送需要操作串口寄存器以及RS485方向控制引脚,需跟硬件密切相关,以下代码使用的硬件为lpc1778,但思想是通用的。4.1 定义数据结构1.
/*串口帧发送结构体*/
typedef struct {
uint16_t send_sum_
//要发送的帧数据长度
//当前已经发送的数据长度
//是否发送标志
uint8_t * send_
//指向要发送的数据缓冲区
}uart_send_
4.2 定时处理函数1.
定时发送函数,在定时器中断中调用,不使用发送中断的情况下减少发送等待
UARTx:指向硬件串口寄存器基地址
p:指向串口帧发送结构体变量
#define FARME_SEND_FALG 0x5A
#define SEND_DATA_NUM
static void uart_send_com(LPC_UART_TypeDef *UARTx,uart_send_struct *p)
uint32_t tmp32;
if(UARTx-&LSR &(0x01&&6))
//发送为空
if(p-&send_flag==FARME_SEND_FALG)
RS485ClrDE;
// 置485为发送状态
tmp32=p-&send_sum_len-p-&send_cur_
if(tmp32&SEND_DATA_NUM)
//向发送FIFO填充字节数据
for(i=0;i&SEND_DATA_NUM;i++)
UARTx-&THR=p-&send_data[p-&send_cur_len++];
for(i=0;i&tmp32;i++)
UARTx-&THR=p-&send_data[p-&send_cur_len++];
p-&send_flag=0;
RS485SetDE;
&其中,RS485ClrDE为宏定义,设置RS485为发送模式;RS485SetDE也为宏定义,设置RS485为接收模式。&使用例子:定义数据结构体变量:
uart_send_struct uart0_send_定义发送缓冲区:
uint8_t uart0_send_buf[UART0_SEND_LEN];根据使用的硬件串口,对定时处理函数做二次封装:
void uart0_send_data(void)
uart_send_com(LPC_UART0,&uart0_send_str);
}将封装函数uart0_send_data();放入定时器中断处理函数中;在需要发送数据的地方,设置串口帧发送结构体变量:
uart0_send_str.send_sum_len=data_
//data_len为要发送的数据长度
uart0_send_str.send_cur_len=0;
uart0_send_str.send_data=uart0_send_
//绑定发送缓冲区
uart0_send_str.send_flag=FARME_SEND_FALG;
//设置发送标志5.& 总结&&&&&& 本文主要讨论了一种高效的串口数据收发方法,并给出了具体的代码实现。在当前处理器任务不断增加的情况下,提供了一个占用资源少,可提高系统整体性能的新的思路。转载请注明出处:&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:787040次
积分:8818
积分:8818
排名:第1499名
原创:108篇
转载:10篇
译文:11篇
评论:671条
文章:11篇
阅读:40419
文章:20篇
阅读:78058
(5)(2)(3)(6)(2)(3)(3)(4)(5)(5)(2)(3)(2)(1)(1)(1)(1)(3)(3)(1)(2)(2)(2)(1)(1)(1)(1)(4)(3)(2)(5)(5)(1)(6)(9)(1)(3)(2)(4)(4)(1)(2)(13)嵌入式ARM开发 请各位高手推荐个学习步骤_百度知道21ic官方微信-->
后使用快捷导航没有帐号?
查看: 11305|回复: 75
最近在学习arm,感觉arm7是个鸡肋
&&已结帖(0)
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
最近我在学习arm,因为我以前做FPGA开发,用FPGA做控制和算法处理。因此硬件设计在我脑子里影响很深。我看了嵌入式操作系统uc/os,然后周立功的开发板smartARM也快到了。我很快就要移植操作系统,进行项目开发。可是我最近发现arm7的功能很有限,lpc多个引脚,都只能做特定的控制功能。而如果接不到10个接口,我在FPGA上用硬件实现这些接口都可以,为什么一定要让ARM7来做呢?而且我感觉arm7根本无法做FPGA和DSP的算法处理。那只用来做控制的话,我完全可以用FPGA实现,如果控制的接口多了,那我用嵌入软核的FPGA或者DSP也可以。那ARM7就完全没有用了,而且在arm上移植嵌入式操作系统似乎工作量也不比直接用FPGA来控制更方便省事。我感觉我的想法有些误区,可是又不知道错在什么地方。
, , , , , ,
主题帖子积分
主题帖子积分
专家等级:结帖率:10%打赏:0.00受赏:33.00
主题帖子积分
用ARM7真的需要自己移植OS吗,您又不是第一个在lpc2100上用OS用FPGA是可以实现,但是考虑成本、开发周期、可靠性、您项目的移植性。您的项目让其它人是否都能够顺利接手。
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
我还不是很明白
用arm7确实有交给如何移植uc/os的方法,可是我现在看书还是一头雾水。也许板买回来调试一下能好的多。但应该也需要一段时间才能理解整个移植的过程吧。如果考虑成本、开发周期和你说的可靠性等问题,FPGA有很大的弱势吗?我对arm还有个理解就是,arm就是为了软件工程师定做的,让软件工程师可以避开底层的硬件,方便的在上层开发,就好像很多在电脑上开发应用软件的工程师,根本不需要理解主板的结构和CPU的引脚功能一样。而像我以前做硬件开发的人,就不需要再用像arm这样的开发工具了。请问我这种理解对吗?还有,arm能否做一些稍微麻烦的数字信号处理方面的工作,我的boss想把在DSP上跑的算法处理移植到arm上,他的想法就是同样都是用C语言编程,那移植到arm上就没有问题,这样理解对吗?我稍微询问了一下在DSP上跑的算法,如果我用FPGA在硬件上实现没什么问题,可在arm上就不知道了。我感觉我们部门的同事对arm理解都有很大的误区,我也学习不久,也不能很好的理解。
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
谢谢版主回复了。
我刚学arm不久,来这版块时间也不常,希望你们这些高手多多帮忙啦。
主题帖子积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
主题帖子积分
专家等级:结帖率:88%打赏:0.00受赏:82.30
主题帖子积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
各有各的长处,各有各的偏重。从楼主的应用来看确实FPGA比
但对于软核的性能还有待商榷。ARM更适合在要求有相当灵活性和可扩展性的系统中应用。
主题帖子积分
主题帖子积分
专家等级:结帖率:10%打赏:0.00受赏:33.00
主题帖子积分
不同的产品有不同的应用,
夸大点讲就是永远不会有人拿PIII做只需要4位MCU就能完成的小玩具一样。如果您考虑清楚了,各种方法都评估完善了,最终确定FPGA可行,那就用FPGA实现也没有错。lpc2100是用来替代高级单片机的,适合做控制,而不是取代DSP的,算法不是它的长处
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
谢谢大家的回复了。
谢谢大家了,如果大家还有什么指点的话请不要保留啊。我再想询问一个问题,我看LPC2210的芯片资料发现,他们对芯片几乎所有的管脚的功能都定义好了,比如有的做串口,有的做数据和地址接口。这和FPGA完全不一样,FPGA的通用IO口都是一样的,至于用来做什么完全自己定义。那arm能够自己定义引脚的功能吗?比如说他们规定用来做串口的引脚,我能自己设置做IIC或者USB接口吗?
主题帖子积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
主题帖子积分
专家等级:结帖率:88%打赏:0.00受赏:82.30
主题帖子积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
LS:那是对你的硬件设计比较方便,
但一旦板子设计好了所用引脚就固定了,ARM的灵活性并不是体现在这上面。
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
楼上的朋友,可能我没说清我的问题让你误解了
我的问题是:arm芯片都自己定义了管脚的功能,我能否自己更改这些功能吗?比如,arm芯片有做串口的引脚,那我能否把这个管脚当成USB的管脚从而做USB的数据传输呢?还有您说的对硬件设计比较方便是什么意思呢?
主题帖子积分
主题帖子积分
专家等级:结帖率:75%
主题帖子积分
不能。数据手册上说它是什么功能,它就只能是什么功能了
就像你的FPGA一样,能做输入输出引脚使用的普通IO口,不能用来做模拟电压比较器,也不能拿来做ADC输入,因为它就不具备那个功能。你使用CPLD或者FPGA什么的,主要是成本高,一些比较长的处理和控制也不太好实现。而CPU不一样,它是一个软件执行的过程,程序容易写。有些操作用HDL语言来描述,可能会累死人。
主题帖子积分
高级工程师, 积分 6162, 距离下一级还需 1838 积分
高级工程师, 积分 6162, 距离下一级还需 1838 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级工程师, 积分 6162, 距离下一级还需 1838 积分
高级工程师, 积分 6162, 距离下一级还需 1838 积分
ARM7不错啊。代替单片机超级好.呵呵.
arm芯片有做串口的引脚,那我能否把这个管脚当成USB的管脚从而做USB的数据传输呢?/////////////////////////你选错了.
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
感谢大家的回复了
我也很高兴有这个项目机会能了解arm这个工具,感觉arm还是偏于软件,以前我没做过软件方面,正好好好的熟悉一下。看来我还要继续学习arm,现在对arm理解还是不行,要是再有什么心得,再和大家一起讨论分享。
主题帖子积分
主题帖子积分
专家等级:结帖率:75%
主题帖子积分
呵呵,其实你要学的并不是ARM,而是计算机原理,
冯诺依曼结构的计算机原理。
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
楼上的朋友,你有什么资料推荐一下吗?
我对冯诺依曼结构和哈佛结构也只是能从字面上去了解,我想深入了解的话有什么资料能推荐一下吗?而且我对arm的运算能力也没有认识,我想好好理解一下一段C代码是如何转换成arm能够识别的指令,进而在内核中运行的。
主题帖子积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
主题帖子积分
专家等级:结帖率:88%打赏:0.00受赏:82.30
主题帖子积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
呵呵,字面上可看不出什么,只是两个人名。
不用这么复杂,随便找本相关的入门级书就可以,现在中学生都能说的头头是道。
主题帖子积分
中级工程师, 积分 3659, 距离下一级还需 1341 积分
中级工程师, 积分 3659, 距离下一级还需 1341 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级工程师, 积分 3659, 距离下一级还需 1341 积分
中级工程师, 积分 3659, 距离下一级还需 1341 积分
ARM7,特别是LPC的,特别适合做控制方面的东西
主题帖子积分
主题帖子积分
专家等级:结帖率:75%
主题帖子积分
其实冯诺依曼结构是指将程序存储在存储器内,然后一条条
而现在的计算机都是如此,出现哈佛结构结构这个词,主要是为了区分数据总线等结构不一样,我从来就不认为这两者是同一个分类标准,所以不能将两者放在一块比较。哈佛结构也是冯诺依曼结构的计算机。计算机原理的书多了去了,随便找本看看就行了吧,不过那些最新的讲奔腾处理器什么的书还是不要买,要买就买那些比较早的,什么Z80,什么的,这些比较简单,或者一些像51单片机一类的书也不错,用这些学习比较好。C语句经过编译器编译连接后,就成了指令。其实指令也没什么,就是一些二进制的数字。而说简单点,CPU也很简单,就是有一个计数器(程序计数器,PC),从0开始计数,根据这个计数器的值作为地址,将对应的存储器中的指令(就是一些数)取出来,交给指令译码器译码,译码之后就会产生一些动作,这些其实就跟你常接触的FPGA里面那些操作差不多了。然后PC值增加,执行下面的指令,就这样依次执行下去。当然再复杂些就是有跳转,中断什么的。
主题帖子积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
主题帖子积分
专家等级:结帖率:88%打赏:0.00受赏:82.30
主题帖子积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
技术总监, 积分 41240, 距离下一级还需 8760 积分
“哈佛”可比“冯诺依曼”早啊。
主题帖子积分
资深技术员, 积分 325, 距离下一级还需 175 积分
资深技术员, 积分 325, 距离下一级还需 175 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 325, 距离下一级还需 175 积分
资深技术员, 积分 325, 距离下一级还需 175 积分
arm功耗小!!
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 343, 距离下一级还需 157 积分
资深技术员, 积分 343, 距离下一级还需 157 积分
arm和dsp功耗都不大
arm和dsp功耗都不大,我们项目组的其它成员都比较反对用FPGA实现算法,就是因为功耗大的缘故,反正项目将来还要讨论这些问题,我还是先学着arm先。
核心会员奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术导师奖章
人才类勋章
荣誉元老奖章
等级类勋章
时间类勋章
技术领袖奖章
人才类勋章
永恒之光奖章
等级类勋章
无冕之王奖章
等级类勋章
沉静之湖泊
发帖类勋章
时间类勋章
技术高手奖章
人才类勋章
突出贡献奖章
等级类勋章
晶莹之水滴
发帖类勋章
时间类勋章
热门推荐 /1大家我我最近刚学ARM 想用ARM9做一个温湿度采集系统,选用的温湿度传感器是SHT71,_百度知道

我要回帖

更多关于 挨板子 的文章

 

随机推荐