外设

iOS——蓝牙开发

与世无争的帅哥 提交于 2019-12-05 02:40:33
一、理论概念: 1.当前ios中开发蓝牙所运用的系统库是<CoreBluetooth/CoreBluetooth.h>。 2.蓝牙外设必须为4.0及以上(2.0需要MFI认证),否则无法开发,蓝牙4.0设备因为低耗电,所以也叫做BLE。 3.CoreBluetooth框架的核心其实是两个东西,peripheral和central, 可以理解成外设和中心,就是你的苹果手机就是中心,外部蓝牙称为外设。 4.服务和特征(service and characteristic):简而言之,外部蓝牙中它有若干个服务service(服务你可以理解为蓝牙所拥有的能力),而每个服务service下拥有若干个特征characteristic(特征你可以理解为解释这个服务的属性)。 5.Descriptor(描述)用来描述characteristic变量的属性。例如,一个descriptor可以规定一个可读的描述,或者一个characteristic变量可接受的范围,或者一个characteristic变量特定的单位。 6.我们使用的蓝牙硬件模块是在淘宝上买的, 大概十多元一个, ios大概每次可以接受90个字节, 安卓大概每次可以接收20个字节, 具体数字可能会浮动, 应该与蓝牙模块有关。 二、蓝牙连接的主要步骤 a、创建一个CBCentralManager实例来进行蓝牙管理; self

STM32_ADC

女生的网名这么多〃 提交于 2019-12-04 22:03:56
裸机--ADC 简介 STM32f103 系列有 3 个 ADC,精度为 12 位,每个 ADC 最多有 16 个外部通道。 其中ADC1 和 ADC2 都有 16 个外部通道,ADC3 根据 CPU 引脚的不同通道数也不同,一般都有8 个外部通道。 功能 电压输入范围: ADC 输入范围为:VREF- ≤ VIN ≤ VREF+。由 VREF-、VREF+ 、VDDA 、VSSA、这四个外部引脚决定. 一般把 VSSA 和 VREF-接地,把 VREF+和 VDDA 接 3V3,得到ADC 的输入电压范围为:0~3.3V。 电压范围变宽 外部电压转换为0-3.3V. 输入通道 外部通道(最多16道) ADCx_IN0~~ADCx_IN15 内部通道 ADC1 的通道 16 连接到了芯片内部的温度传感器,Vrefint 连接到了通道 17。 ADC2 的模拟通道 16 和 17 连接到了内部的 VSS。 ADC3 的模拟通道 9、14、15、16 和 17 连接到了内部的 VSS。 规则通道 注入通道 触发源 ADC控制写0/1 定时器触发 外部IO触发 转换时间 时钟 ADC 输入时钟 ADC_CLK 由 PCLK2 经过分频产生,最大是 14M, 采样时间 采样周期最小1.5个周期 Tconv = 采样时间 +12.5 个周期。当 ADCLK = 14MHZ (最高)

《操作系统真象还原》MBR

元气小坏坏 提交于 2019-12-04 12:04:14
  以下是读本书第三章的收获。   如何知道一个源程序的各符号(指令和变量)地址?简单来说,地址就是该符号偏移文件开头的距离,符号的地址是按顺序编排的,所以两个相邻的符号,其地址也是相邻的。对于指令来说,指令的地址=上一个指令的地址+上一个指令的大小,最初的符号地址为0,可以根据此公式推算出所有符号的地址。 section称为节,它是提供给程序员编排程序用的,我们可以将一段读取字符串的代码放在section A下,将读取硬盘的代码放进section B下,可以给A,B换成一个更具体的名字,来提高可读性。 例如,下图这段代码,将整个程序分成section code和section data两节,顾名思义,就是存放代码和数据的两个section,这样我们就很清楚地知道每部分代码是做什么用的。另一个值得注意的细节是section并不会对符号的编址用什么影响,去掉section和不去掉其实符号的地址都是一样的。 vstart用于告诉编译器,之后的符号都以某个地址为初始地址来编址。如下图,像$$的地址替换成以0x7c00为初始地址的地址,符号var1和var2的地址被替换成以0x900的地址。 当然,我们还可以通过section.节名称.start来获得在文件中真正的地址。如section.code.start值为0x0,即section code偏移文件的距离为0

2019年11月12日

亡梦爱人 提交于 2019-12-04 06:53:34
一、USART简介   通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。   STM32 的串口资源相当丰富的,功能也相当强劲。STM32F103ZET6 最多可提供 5 路串口,有分数波特率发生器,支持同步单向通信和半双工单线通信,支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。 二、USART功能概述   接口通过三个引脚与其他设备连接在一起。任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。   RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。   TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。   串口外设主要由三个部分组成,分别是波特率的控制部分、收发控制部分及数据存储转移部分。   1、波特率控制   波特率,即每秒传输的二进制位数,用 b/s (bps)表示,通过对时钟的控制可以改变波特率。在配置波特率时

2019年11月5日

南笙酒味 提交于 2019-12-03 14:50:14
什么是寄存器 在点亮 LED 的时候,我们都是用操作寄存器的方法来实现的,那大家是否想过,这个 寄存器到底是什么?为什么我们可以直接操作 P0 口? 解答上面的问题之前,我们先简单介绍下 51 单片机的主要组成部分,这对我们学习其 他单片机也有好处。 我们以国内的 STC89C51 为例,该单片机主要由 51 内核、外设 IP、和总线这三大部分 组成。内核是由 Intel 公司生产的,外设 IP 就是 STC 公司在内核的基础上添加的诸如定时 器、串口、IO 口等这些东西,总线就是用来连接内核和外设的接口单元。Intel 在这里属于 IP 核设计公司,STC 属于 IC 设计公司。世界上能设计 IP 核的公司屈指可数。我们非常熟 悉的 ARM 公司就属于 IP 核设计公司,ARM 给其他公司授权,其他 IC 公司就在 ARM 内 核上设计出各具特色的 MCU,我们后面要学习的 STM32 就是属于一中基于 ARM 内核的 MCU。 寄存器则是内置于各个 IP 外设中,是一种用于配置外设功能的存储器,就是一种内 存,并且有想对应的地址。学过 C 语言我们就知道,要操作这些内存就可以使用 C 语言中 的指针,通过寻址的方式来操作这些具有特殊功能的内存—寄存器。比如 P0 口对应的地址 是 0X80,那么我们要修改 0X80 这个地址对应的内存的内容的话,按照常理可以这样操 作: 1 *

单片机的外设

◇◆丶佛笑我妖孽 提交于 2019-12-03 11:49:30
单片机的外设 有很多单片机的外设,初步一看,被设计得莫名其妙,但是实际上该外设被设计出来的时候已经是考虑到了其专门的 应用场合。 1、比如freescale(NXP)的mpc5xxx系列单片机的FlexPWM,可以中心互补对称三相PWM。专门为电机驱动设计。 2、Injected conversion。也是专门为电机驱动设计的。 3、CTU也可以认为是专门为电机驱动设计的。 来源: https://www.cnblogs.com/praiseslow/p/11794839.html

嵌入式驱动程序设计的小窍门,业界大牛总结

北慕城南 提交于 2019-12-03 07:04:11
对于嵌入式来说,嵌入式应用软件都会在特定时候访问底层固件和进行硬件控制,嵌入式驱动程序的设计是满足嵌入式系统最关键的一步,学习嵌入式对嵌入式驱动程序设计是比较关键的,那么如何学嵌入式驱动程序设计成为了关键,在这里业界大牛总结了一些嵌入式驱动程序设计的小窍门,对学习嵌入式驱动程序设计还是老有用了。 点击了解更多小窍门: http://emb.hqyj.com/VideoCourse/?lbx 首先就是我们在做嵌入式驱动程序设计使用设计模式时,在这里有一个注意的点,认真看哦: 嵌入式驱动程序设计 对于设计模式来说,设计模型就是一个用来处理那些在软件中会重复出现的问题的解决方案。 开发人员可以选择浪费宝贵的时间和预算从无到有地重新发明一个解决方案,也可以从他的解决方案工具箱中选择一个最适合解决这个问题的方案。在微处理器出现之初,底层驱动已经很成熟了,那么,为什么不利用现有的成熟的解决方案呢? 在这里就有一个小技巧咯,驱动程序设计模式大致分属以下4个类别:Bit bang、轮询、中断驱动和直接存储器访问(DMA)。 Bit bang模式:当微控制器没有内外设去执行功能的时候,或者当所有的内外设都已经被使用了,而此时又有一个新的请求,那么开发者就应该选择Bit bang设计模式。Bit bang模式的解决方案很有效率,但通常需要大量的软件开销来确保其实施的能力。Bit

iOS 作为蓝牙外设广播信息

匿名 (未验证) 提交于 2019-12-02 23:57:01
苹果蓝牙后台的限制,原本广播会有两个段分别是localName和serviceUUID这两块,但现在后台广播时,是不发送在这两段的 手机app可以作为一个蓝牙外设端来模拟外设硬件,但广播包里的数据只能包含localName和serviceUUID,相对于外设硬件来说还是有一些不足之处。 一个128位的蓝牙UUID来标示 32个 x 是 0-9 或 a-f 范围内的一个十六进制的数字(0x00),X是字符串格式 把数据按uuid的格式加进去 self.peripheralManager startAdvertising:@{CBAdvertisementDataServiceUUIDsKey:serviceUUIDs,CBAdvertisementDataNameKey:localName}]; 对应的值是数组 key: kCBAdvDataIsConnectable, value: 1 key: kCBAdvDataLocalName, value: SimpleBLEPeripheral key: kCBAdvDataServiceUUIDs // 数据就在这里 uuid(0): FF F0 key: kCBAdvDataTxPowerLevel, value: 0 Manufacturer Specific Data NSArray *keys =

ios设备app作为蓝牙外设端

匿名 (未验证) 提交于 2019-12-02 23:49:02
苹果手机可以作为蓝牙外设端,被蓝牙中央端来扫描连接交互数据,实现模拟蓝牙外设硬件。通过阅读CoreBluetooth库,可以找到一个CBPeripheralManager的类,该类主要的作用就是允许你来管理发布services,把这些services广告给其他的设备。如果想详细了解该类的属性和方法,建议去看看CoreBluetooth/CBPeripheralManager.h。 下面来模拟一个简单的蓝牙外设端。 准备工作 CBUUID *serviceUUID; CBUUID *characteristicUUID; NSData *characteristicValue; NSString *localName; NSArray *serviceUUIDs; 上面中,serviceUUID为给外设配置的服务的UUID,可以有多个,characteristicUUID为给service添加的特征的UUID,也可以有多个,可自定义可读可写等等属性.characteristicValue为characteristic的值,localName和serviceUUIDs分别为键CBAdvertisementDataLocalNameKey和CBAdvertisementDataServiceUUIDsKey对应的value。由于作为外设端时发送广播包,广播包中提供包含着两个键值对

USB OTG ID 检测原理

匿名 (未验证) 提交于 2019-12-02 23:43:01
OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG)。USB OTG技术可实现没有主机时设备与设备之间的数据传输。例如:数码相机可以直接与打印机连接并打印照片,手机与手机之间可以直接传送数据等,从而拓展了USB技术的应用范围。在OTG中,初始主机设备称为A设备,外设称为B设备。也就是说,手机既可以做外设,又可以做主机来传送数据,可用电缆的连接方式来决定初始角色(由ID线的状态来决定)。 USB OTG接口中有5条线: 2条用来传送数据(D+ 、D-); 1条是电源线(VBUS); 1条则是接地线(GND)、 1条是ID线。ID线―以用于识别不同的电缆端点,mini-A插头(即A外设)中的ID引脚接地,mini-B插头(即B外设)中的ID引脚浮空。当OTG设备检测到接地的ID引脚时,表示默认的是A设备(主机),而检测到ID引脚浮空的设备则认为是B设备(外设)。 只有而言支持USB OTG的设备(即可以做USB Host有可以做Slave的设备),USB_ID信号才有意义。 当设备检测到USB_ID信号为低时,表该设备应作为Host(主机,也称A设备)用。 当设备检测到USB_ID信号为高时,表示该设备作为Slave(外设,也称B设备)用。 实际的USB连接线中,是没有USB