单片机

单片机(5)

寵の児 提交于 2019-12-29 11:29:57
计算机通信   随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈显得重要。计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。 通信有并行通信和串行通信两种方式。   在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。   计算机通信是将计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换 。可以分为两大类:并行通信与串行通信。   并行通信通常是将数据字节的各位用多条数据线同时进行传送 。      并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。   串行通信是将数据字节分成一位一位的形式在 一条传输线上逐个地传送。      串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。 串行通信的基本概念   一、异步通信与同步通信     1、异步通信       异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。              异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系

上位机与单片机的通信问题

你。 提交于 2019-12-29 11:29:43
上位机采用的是组态王这款监控软件,单片机采用的是STM32,系统的总框架分为4层: 服务器(组态王)——网关2——网关1——节点 通信过程中遇到的问题如下: 1. 将单片机与组态王连接完成后,组态王上没显示 (1)首先检查电路有没有连接正确(已经确定连接无误) (2)利用串口查看网关1跟网关2打印出来的数据(对照代码中的内容,确定运行到每一步应有什么标志,可以通过打印不同的数据来监测运行到哪一步) 2. 网关2打印的数据总是显示网关2已经给网关1下发查询命令了,但是却没有收到网关1给它回复的数据,而且网关1也没有数据打印 分析可以知道网关2已经给网关1下发查询命令了,但是可能它的命令没有下发成功卡在485那块,导致网关1没有接收到命令所以没有打印数据,或者是网关2已经成功发送出去,只是网关1不接收而已,又或者是网关1已经接收到了但没有解包执行。 出现这种现象,原因有以下几种: (1)程序跑死了 (2)485有问题 (3)硬件问题 因为这程序在之前一直跑得没问题,所以暂时先排除代码问题,先检查485那块的线路 检查结果:线路没连错,但是485线那块的RX,TX,GND这3根线裸露在空气中,而且有几根是相互接触了,用绝缘胶布包好之后,再一次通讯,这时网关1和2都有数据了,但是组态王还是没有显示 (网关2) 由我这个网关2打印的数据对照通信协议可知

STM32系统滴答_及不可不知的延时技巧

一个人想着一个人 提交于 2019-12-28 10:37:24
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我想每个单片机爱好者及工程开发设计人员都有过点灯的经历。流水灯是个好东西,尤其是在调试资源有限的环境中,有时会帮上大忙。 然在最初入门时,如何让这些小灯们按照我们的想法欢快地跑起来呢,绝大多数小朋友的做法是:在一个 while 循环里加上延时程序,让小灯在每个状态下停留一段时间,再进入下一个状态,这样小灯们就会在不同的状态中切换,就可以根据我们设计的程序闪烁了。 这样这里就会涉及到一个延时程序的编写的问题,而一般的做法是一个 for 循环里去减一个很大的数,直到为 0 ,则延时完成,那个数的值则是根据时钟频率和指令运行周期,估算出来的,还记得较久以前看过一篇帖子介绍 51 单片机精确延时的几种方法,有一种方法是在 keil 中设定好时钟频率,然后通过软件仿真试来算延时时间,以达到较精确定时。 但这些方法一般都不够方便,延时也不够精确,更高阶一点的方法便是开一个定时器,在定时中断里面计数达到精确延时的目的。 在 STM32 的应用中,可考虑利用 SysTick 系统嘀嗒定时器来实现。但在 STM32 开发手册中对它的介绍却很少,几乎到没有的程度。因为它是 Cortex 内核的部分, CM3 为它专门开出一个异常类型,并且在中断向量表中占有一席之地(异常号 15 ),这样它可以很方便的移植到不同厂商出 CM3

当前火爆的嵌入式领域,为什么选择C语言作为开发语言?了解一下!

廉价感情. 提交于 2019-12-28 09:05:33
C语言和嵌入式C编程有什么区别?其区别在于嵌入式的C语言是跑在嵌入式的开发板上的,CPU和电脑不一样,所以编译器也是不一样的,生成的可执行程序也是不一样的。选择嵌入式开发语言归结于嵌入式系统开发的特点上。 1、嵌入式系统不是PC系统,是另一种独立操作系统 它包括硬件和软件两部分。硬件包括处理器/微处理器、存储器及外设器件和I/O端口、图形控制器等。软件部分包括操作系统软件(OS)(要求实时和多任务操作)和应用程序编程,有时设计人员把这两种软件组合在一起。应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。 2、嵌入式微处理器是嵌入式系统控制核心 嵌入式微处理器主要功能有四大点: a、对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核心的执行时间减少到最低限度。 b、嵌入式微处理器必须功耗很低,尤其是用于便携式的无线及移动的计算和通信设备中靠电池供电的嵌入式系统,如需要功耗只有mW甚至μW级。 c、具有功能很强的存储区保护功能。这是由于嵌入式系统的软件结构已经模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断。 d、可扩展的处理器结构,以便能最迅速地开发出满足应用的最高性能的嵌入式微处理器。 3、嵌入式系统有别于其他操作系统有很大不同 最大的核心竞争力有六大特点:

STM32固件库文件分析

不羁岁月 提交于 2019-12-28 02:51:03
1-汇编编写的启动文件 ** startup_stm32f10x_hd.s:设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、调用C库函数_main最终去到C的世界: hd(high density) flash大小 2-时钟配置文件 system_stm32f10x.c:把外部时钟HSE=8M,经过PLL(锁相环)倍频为 72M。 3-外设相关的 stm32f10x.h:实现了内核之外的外设的寄存器映射 xxx:GPIO、USRAT、I2C、SPI、FSMC stm32f10x_xx.c:外设的驱动函数库文件 stm32f10x_xx.h:存放外设的初始化结构体,外设初始化结构体成员的参数列表,外设固件库函数的声明 4-内核相关的 CMSIS - Cortex 微控制器软件接口标准 core_cm3.h:实现了内核里面外设的寄存器映射 core_cm3.c:内核外设的驱动固件库 NVIC(嵌套向量中断控制器)、SysTick(系统滴答定时器) misc.h misc.c 5-头文件的配置文件 stm32f10x_conf.h:头文件的头文件 //stm32f10x_usart.h //stm32f10x_i2c.h //stm32f10x_spi.h //stm32f10x_adc.h //stm32f10x_fsmc.h 6-专门存放中断服务函数的C文件

学好单片机编程设计的方法和3个步骤

自古美人都是妖i 提交于 2019-12-27 10:42:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 学习单片机的动机不外乎有四种:一是为兴趣爱好而学,二是为专业而学;三是为饭碗而学;四是在工作中被逼而学。不管是哪种动机,因主修专业的不同以及电子基础的深浅不同,对于不同的人可能采用不同的学习方法,根据笔者的亲身学习经验和教授徒弟学习的感受,提出笔者的学习方法和步骤。 第一步:基础理论知识学习 基础理论知识包括模拟电路、数字电路和C语言知识。模拟电路和数字电路属于抽象学科,要把它学好还得费点精神。在你学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。 否则,你的单片机学习之路不仅会很艰难和漫长,还可能半途而废。笔者始终认为,扎实的电子技术基础是学好单片机的关键,直接影响单片机学习入门的快慢。 有些同学觉得单片机很难,越学越复杂,最后学不下去了。有的同学看书时似乎明白了,可是动起手来却一塌糊涂,究其原因就是电子技术基础没有打好,首先被表面知识给困惑了。 单片机属于数字电路,其概念、术语、硬件结构和原理都源自数字电路,如果数字电路基础扎实,对复杂的单片机硬件结构和原理就能容易理解,就能轻松地迈开学习的第一步,自信心也会树立起来。 相反,基础不好,这个看不懂那个也弄不明白,越学问题越多,越学越没有信心。如果你觉得单片机很难

用51单片机演奏义勇军进行曲

霸气de小男生 提交于 2019-12-27 05:40:23
用51单片机演奏义勇军进行曲 源代码 # include <reg51.h> sbit Buzz = P1 ^ 5 ; //声明绑定蜂鸣器 unsigned int code NoteFrequ [ ] = { 523 , 587 , 659 , 698 , 784 , 880 , 988 , //中音对应的1-7 1047 , 1175 , 1319 , 1397 , 1568 , 1760 , 1976 , //高音对应的1-7 262 , 294 , 330 , 349 , 392 , 440 , 494 } ; //低音对应的1-7 unsigned int code NoteReload [ ] = { //中音1-7和高音1-7对应的定时器重载值 65536 - ( 11059200 / 12 ) / ( 523 * 2 ) , //中音1-7 65536 - ( 11059200 / 12 ) / ( 587 * 2 ) , 65536 - ( 11059200 / 12 ) / ( 659 * 2 ) , 65536 - ( 11059200 / 12 ) / ( 698 * 2 ) , 65536 - ( 11059200 / 12 ) / ( 784 * 2 ) , 65536 - ( 11059200 / 12 ) / ( 880 * 2 ) , 65536

5月5日学习收获

六眼飞鱼酱① 提交于 2019-12-26 13:57:03
波特率:单片机或计算机在串口通信时的速率,指信号被调制后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位×240个/秒=2400bps。 delay函数:在C语言中,该函数一般是自己定义的一个延时函数。 GPIO(General Purpose Input Output):通用输入输出,另称总线扩展器,是利用工业标准I2C、SMBus或SPI接口简化了的I/O口,简而言之,就是每个GPIO端口可通过软件进行配置,决定其是输入还是输出端口。 GPIO库: gpio管脚:一个io管脚,这个管脚可以有多个配置。在库函数中用GPIO_PIN_1这样的宏定义表示。 gpio端口:在库函数中用宏定义GPIOA、GPIOB等表示。 1、gpio库说明 库文件名:stn32f4xx_gpio.c 使用该驱动的方法: (1)使用RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx,ENABLE)函数使能gpio的AHB总线时钟。 (2)使用GPIO_Init()函数对每个引脚进行四种可能的配置: 《1》输入状态:Floating(浮空)、Pull-up(上拉)、Pull-down(下拉) 《2》输出状态:Push-Pull(上拉下拉)

单片机实现寄存器点亮LED实验

风流意气都作罢 提交于 2019-12-26 13:56:39
为了顺利过渡到库开发,在STM32编程的开始,我们对照51点亮一个LED的方法,给大家演示一下STM32如何用操作寄存器的方法点亮一个LED,然后再慢慢讲解到底什么是库,让大家知道库跟寄存器的关系。 1. 用51点亮一个LED   在用STM32点亮一个LED之前,我们先来复习下用51如何点亮一个LED。 硬件上我们假设51单片机的P0口的第0位接了一个LED,负逻辑亮。如果我们要点亮这个LED,代码上我们会这么写: P0 = 0XFE;//总线操作点亮 LED 这时候我们就把LED点亮了,如果要关掉LED ,则是: P0 = 0XFF;//总线操作关闭 LED 这里面我们用的是总线操作的方法,即是对P0口的8个IO同时操作,但起作用的只是P0^0。 除了这种总线操作的方法,我们还学习过位操作,利用51编译器的关键字sbit,我们可以定义一个位变量: sbit LED = P0^0; 那么LED = 0,就点亮了LED; LED = 1,就关闭了 LED。 为了让程序看起来见名知义,我们定义两个宏: #define ON 0 #define OFF 1 点亮和关闭LED的代码就变成了: LED = ON;//位操作点亮LED LED = OFF;//位操作关闭LED 稍微整理一下代码,整体效果就是: //假设51单片机的PO~0口接LED,负逻辑点亮 #define ON 0

单片机的组成以及分类和指标

喜你入骨 提交于 2019-12-26 12:32:26
单片机的组成 单片机又称单片微控制器,它把一个计算机系统集成到一块芯片上,主要包括微处理器(CPU)、存储器(随机访问存储器RAM、只读存储器ROM)和各种输入/输出接口(包括定时器/计数器、并行I/O接口、串行口、A/D转换器以及脉冲宽度调制(PWM)等,如图1-1所示。 ▲图1-1 单片机组成框图 程序存储器(ROM) ROM用来存放用户程序,分为EPROM、Mask ROM、OTP ROM和Flash ROM等。 EPROM型存储器编程(把程序代码通过一种算法写入程序存储器的操作)后,其内容可用紫外线擦除,用户可反复使用,故特别适用于开发阶段,但EPROM型单片机价格很高。 Mask ROM型单片机价格最低,适用于批量生产。由于Mask ROM型单片机的代码只能由生产厂商在制造芯片时写入,故用户更改程序代码十分不便,在产品未成熟时选用此型单片机风险较高。 OTP ROM型(一次可编程)单片机价格介于EPROM和MaskROM型单片机之间,它允许用户对其编程,但只能写入一次。 Flash ROM型单片机可采用电擦除的方法修改其内容,允许用户使用编程工具或在系统中快速修改程序代码,且可反复使用,故一推出就受到广大用户的欢迎。Flash ROM型单片机既可用于开发阶段,也可用于批量生产,随着制造工艺的改进,价格不断下降,使用越来越普遍,已成为现代单片机的发展趋势。 中央处理器