tag 标签: 嵌入式

相关帖子
相关博文
  • 热度 9
    2020-9-2 14:40
    1579 次阅读|
    4 个评论
    多功能按键嵌入式程序设计
    1. 按键算法简介 这是一种多功能按键的嵌入式程序设计算法,它支持按键检测规则可配、多种按键事件和最大 32 数量的按键检测,该算法首先是通过读取芯片管脚 IO 电平的变化,再经过滤波和自定义规则算法输出按键事件,最终达到用户所需要功能的目的。如在单一按键中,可以有单击、双击、三击、短按、长按和超长按等事件,不同的事件可以自定义不同的功能。用户通过简单的初始化 GPIO 再加上按键检测算法,就容易实现按键多功能。它的应用场合,如 TWS 耳机、助听器、电子手表、单按键智能插座和智能灯控面板等。 1.1. 按键规则设计 按键检测规则如下: 名称 英文 范围 ( ms ) 设置值 长按 Long p ress 0 -12000 1 500 超长按 Long Long p ress 0 -12000 4 000 超超长按 Long Long Long p ress 0 -12000 8 000 双击 D ouble Press 0-1000 6 00 三击 Triple P ress 0-1000 800 重复 时间间隔 repeat rate 0-1000 4 00 滤波次数 Number Of F ilter 0 -255 2 检测周期 C hecks Cycle 0 -255 2 0 按键执行 Key A ctive L OW: 低电平有效,需要配置成上拉 H IGHT: 高电平有效,需要配置成下拉 L OW 低电平有效 1.2. 按键事件类型 按键事件类型如下: 名称 英文 备注 单击 KEY _TYPE_SINGLE 双击 KEY _TYPE_DOUBLE 三击 KEY _TYPE_TRIPLE 短按 KEY _TYPE_LONG 短按 _ 释放 KEY _TYPE_LONG 长按 KEY _TYPE_LONG 长按 _ 释放 KEY _TYPE_LONG _ RELEASE 超长按 KEY _TYPE_VLONG 超长按 _ 释放 KEY _TYPE_VLONG _ RELEASE 超超长按 KEY _TYPE_VVLONG 超超长按 _ 释放 KEY _TYPE_VVLONG _ RELEASE 2. 程序展示 按键检测首先要对按键进行编号,按键序号码:第一个按键为 KEY1 ,第二个按键为 KEY2 ,第三个按键为 KEY3 ,若需要有更多按键可以往上加 KEY4 、 KEY5...KEYn , n<=31 。按键序号在按键输入和输出事件启到指定按键。 在程序设计中做一个枚举结构如下: enum { KEY1=0, KEY2, KEY3 }; 2.1. 按键检测初始化 初始化需要预先初始化 mark ,告诉算法需要检测按键的序号,检测规则需改变, 可以使用规则参数配置的结构体赋值,调用 void Button_SetKeyConfig(BUT_cfg_t KeyConfig) 函数,将参数传递进去。如果按照默认参数,就不需要重新初始化。 2.2. 按键 GPIO 高低电平采样 tKey_code 有 0-31(bit) ,其中 KEY1 为第 0bit ,它的值是 BUTTON1_DIO 管脚高低电平的值, 0 为低电平, 1 为高电平。所以表达式为 tKey |= 管脚电平状态? (1UL<
  • 热度 1
    2020-1-10 16:46
    794 次阅读|
    0 个评论
    【兆易创新RISC-V开发板评测】初评之STM32F103VBT6、GD32VF103VBT6特性比较
    笔者申请这款开发板的本意就是想对比常用的 STM32 家族芯片与 RISC-V 内核芯片在使用上的相同与不同之处,深入了解全球第一款 RISC-V 内核 32 位通用 MCU 本身的特性性能以及编程体验,以便在以后的项目中在微控制器的选择上做出权衡。因此,在拿到开发板后,有必要写一篇 STM32 系芯片与 GD 系芯片特性参数对比报告,扩大今后 MCU 的选择范围。兆易创新以 VF103 来命名第一款 RISC-V 内核的微处理器必然是对标 STM 公司 F103 系列微处理器,为了公平起见,本片测评以 STM 公司的 STM32F103VBT6 芯片和兆易创新的 GD32VF103VBT6 芯片从内核、容量、时钟、电源要求、管脚兼容性、主要外设几个方面做一个简单对比。 1. 内核 STM32F103 系列采用 ARM 公司 Cortex-M3 内核,核心频率最大 72MHz ,在零等待状态访问快闪存储器时计算性能可达 1.25DMIPS/MHz ,具有单周期乘法器和硬件除法器。 GD32VF103 系列采用芯来科技 Bumblebee 内核,核心频率最大 108MHz ,在零等待状态访问快闪存储器时计算性能可达 153DMIPS ,具有单周期乘法器和硬件除法器。 2. 容量对比 STM32F103 系列提供片上 16~1024KBytes FLASH 存储器, 6~96KBytes 静态 RAM 存储器, STM32F103VBT6 本身提供 128KBytes FLASH 和 20KBytes SRAM 。 GD32VF103 系列提供片上 16~128KBytes FLASH 存储器, 6~32KBytes 静态 RAM 存储器, GD32VF103VBT6 本身提供 128KBytes FLASH 和 32KBytes SRAM 。 3. 时钟对比 STM32F103VBT6 支持外部输入 4~16MHz 时钟信号,拥有 8MHz 和 40KHz 出厂校验的内部 RC 时钟。 GD32VF103VBT6 支持外部输入 3~25MHz 时钟信号,同样拥有 8MHz 和 40KHz 出厂校验的内部 RC 时钟。图 1 和图 2 分别为 STM32F103VBT6 和 GD32VF103VBT6 外设时钟树。 图 1 STM32F103VBT6 时钟树 图 2 GD32VF103VBT6 时钟树 4. 供电和功耗模式对比 STM32F103 供电范围支持 2.0~3.6V 电源供电,有单独供电引脚为 RTC 和备份寄存器供电,支持睡眠、停止和待机模式。 GD32VF103VBT6 供电范围支持 2.6~3.6V 电源供电,同样有单独供电引脚为 RTC 和备份寄存器供电,支持睡眠、深度睡眠和待机模式。图 3 和图 4 分别为 STM32F103VBT6 和 GD32VF103VBT6 电源域。 图 3 STM32F103VBT6 电源域 图 4 GD32VF103VBT6 电源域 5. 管脚兼容性 STM32F103VBT6 和 GD32VF103VBT6 脚位完全兼容,可以相互替换,图 5 和图 6 分别为 STM32F103VBT6 和 GD32VF103VBT6 脚位图。 图 5 STM32F103VBT6 脚位图 图 6 GD32VF103VBT6 脚位图 6. 主要外设对比 图 7 和图 8 为 STM32F103VBT6 和 GD32VF103VBT6 外设概览。 图 7 STM32F103VBT6 外设概览 图 8 GD32VF103VBT6 外设概览 6.1UART/USART STM32F103VBT6 拥有 3 个 USART ,其中 USART0 最高通信速率可达 4.5Mbit/s , USART1 、 USART2 最高可达 2.25Mbit/s 。 GD32VF103VBT6 拥有 5 个 U(S)ART ,其中 USART0 最高通信速率可达 6.75Mbit/s 。 6.2 定时器 STM32F103VBT6 拥有 1 个具有互补通道输出的 16 位高级定时器, 3 个 16 位通用定时器, 1 个 12 位向下计数独立看门狗, 1 个 7 位向下计数窗口看门狗和 1 个 24 位向下计数系统滴答定时器。 GD32VF103VBT6 拥有 1 个具有互补通道输出的 16 位高级定时器, 4 个 16 位通用定时器, 2 个 16 位基本定时器, 1 个 12 位向下计数独立看门狗, 1 个 7 位向下计数窗口看门狗和 1 个 64 位向上计数系统滴答定时器。 6.3SPI STM32F103VBT6 拥有 2 个 SPI ,可工作于主 / 从模式、全双工 / 半双工模式,最高通信速率可达 18Mbit/s 。 GD32VF103VBT6 拥有 3 个 SPI ,可工作于主 / 从模式、全双工 / 半双工模式,最高通信速率可达 27Mbit/s 。 6.4IIC STM32F103VBT6 拥有 2 个 IIC ,可工作于多主机模式和从机模式,传输支持标准和快速模式。 GD32VF103VBT6 同样拥有 2 个 IIC ,可工作于主机模式和从机模式,传输支持标准和快速模式。 6.5ADC STM32F103VBT6 拥有 2 个 12 位 ADC ,每个 ADC 共享 16 个外部输入通道,可工作于单次模式和扫描模式,支持外部触发采集。采集范围 2.4~3.6V ,最大采样速率 1MHz 。 GD32VF103VBT6 拥有 2 个 12 位 ADC ,每个 ADC 共享 16 个外部输入通道,可工作于单次模式和扫描模式,支持外部触发采集。采集范围 2.6~3.6V ,最大采样速率 1MHz ,可配置为 12 位、 10 位、 8 位或 6 位采样精度。 6.6USB STM32F103VBT6 拥有 1 个全速 12Mbit/s USB2.0 Host/Device/OTG 设备, D+ 引脚需经 1.5K Ω电阻上拉到 3.0~3.6V 电平。 GD32VF103VBT6 拥有一个全速 12Mbit/s USB2.0 Host/Device/OTG 设备, D+ 引脚上拉电阻已经集成在内部全速 PHY 内部。 6.7CAN STM32F103VBT6 拥有 1 个 CAN 总线接口,而 GD32VF103VBT6 拥有 2 个 CAN 总线接口。 6.8 其它 GD32VF103VBT6 拥有 2 个 12 位独立 DAC ,并可配置为 8 位或 12 位模式;拥有 16 位数据宽度的外部内存控制器,支持 SRAM , PSRAM , ROM 和 NOR-Flash 以及 6800 、 8080LCD 接口。 7. 总结 整体来说, GD32VF103 相对于同一梯队的 STM32 产品来说,不仅核心频率更高,而且外设也更丰富,配置也更灵活,毕竟是新时代的新生儿。通过以上比较,可以看出兆易创新在全球第一款基于 RISC-V 内核 32 位通用 MCU 身上下的功夫以及替代 ARM 的决心,作为国人,也应当支持。这一篇评测主要是对两种不同内核的 MCU 产品有一个初步比较认识,下一篇评测则专注两种芯片具体功耗和性能比较。
  • 热度 3
    2019-11-1 12:48
    1305 次阅读|
    2 个评论
    MM32 Motor–DK 试用体验 + 旋转的“小电机”
    一. 灵动的礼物 首先感谢面包板社区,能够给我提供这次的机会,其次,感谢灵动微电子提供给的无刷电机 FOC 开发板,作为一个电机控制的爱好者,非常喜欢 MM32 Motor; 灵动的客服人员和负责业务的小姐姐也都非常的热心,对于群里面有人提问的每一次问题都非常耐心的回答,从来都没有糊弄过一个使用者;对于写测评的爱好者,又免费提供小熊、电机和 MM32-LINK 仿真器,而且每次快递都是顺丰快递,运费完全由灵动微电子公司出,真的是每一件小事情都考虑的非常的周到,之后我在想究竟是什么一群人,在做灵动微电子行业,做的如此的出色,我想他们的初心一定是能够使灵动微电子行业,能够对社会做出更大的贡献,不辜负每一个热爱灵动微电子行业的爱好者。在此,我非常感谢灵动微电子提供了一个很好的交流平台。 二. 灵动和小电机的亮相 首先,我们来看一下两块板子的照片吧 通过上面的照片,我们发现设计的非常的巧妙,焊工也非常的扎实,可见灵动公司的设计人员非常的仔细认真,整体效果不错,子母板叠层设计, MCU 板可更换,便于升级 MCU 。板子 PCB 布局比较合理,按键部分避开了电源输出调试线路,非常赞! MCU 板引脚资源也都给用户引出了。 三. 硬件部分 本次实验的目的,主要是让 FOC 无感电机实现七段调速,对于 FOC 无感电机,灵动微电子的工作人员后期给我们免费邮寄了此电机,对此非常感谢相关的工作人员。因此,我对电机进行介绍一下。 上图为启动前的初始速度介于 DIRECT_ENTER_CLOSE_LOOP_MIN_SPEED ~RAMP_UP_CHANGE_TO_SLOP3_SPEED 参数设定值之间 , 启动后首先将以 OPEN_LOOP_RAMP_DOWN_SPEED_SLOP3 设定的减速度降速 , 当速度低于 RAMP_UP_CHANGE_TO_SLOP3_SPEED 时将改变减速度的设定值为 OPEN_LOOP_RAMP_DOWN_SPEED_SLOP2, 之后依据下图所示的程序降速至 0, 接着以三段式正转开回路加速度升速至闭回路控制。 下图为闭回路驱动软件设计框图。 软件流程一开始是由 ADC 读取外部输入电压产生目标速度命令 , 经过闭回路加速度斜率控制器运算后 , 得到可提供速度 PI 控制器功能方块的速度命令 , 接着用此速度命令与反馈的实际速度 , 经由 PI 控制器计算之后产生力矩电流命令。 磁场导向控制器 (FOC) 功能方块接收到此力矩电流命令及电机的估测角度后 , 经过三相电流的反馈、坐标转换、 电流环 PI 计算、及空间矢量调制 (SVPWM) 等法则运算 , 由此获得要逼近目标转速所需求的三相 PWM 占空比数据 , 之后将此数据产生 PWM 输出给予外部的电力驱 动组件 , 以此驱动电机运转。 在磁场导向控制器功能方块产生 PWM 讯号的过程中 , 滑模估测器 (SMO) 功能方块负责产生电机运转所需要的估测角度及速度。 四. 软件部分设计 上图为主要的软件控制流程图,在 Main() 程序中除了初始化的各个子程序之外 , 主要功能为系统时间管理 system_time_management(); 及电机运行模式的处理 (Motor Run Mode Process) 。 系统时间管理 system_time_management(); 电机运行模式处理 (Motor Run Mode Process) 主要是安排电机各种不同模式的状态流程管理 , 总共有五种状态模式 , 依序为: 停止 / 零电流时校正 / 检测 BEMF/ 开回路运行 / 闭回路状态模式等。 停止模式 ;电机处于停止状态。 零电流校正模式 :电机收到启动命令后 , 电机尚未启动 , 故运算放大器的输入端为零电流的输入状态 , 此时需 ADC 量测电流运算放大器输出的电压值 , 做为后续电流量测的校正值 , 完成后接下来将会执行检测 BEMF 状态模式。 检测 BEMF 模式 :零电流校正状态模式完成后 , 需先检测电机目前是处于静止、顺转或逆转的哪一种状态 , 以便做为后续如何启动电机的依据 , 这个电机状态的检测是由 BEMF U, V 电压值的侦测而得知的。 开回路模式 :电机处于开回路运行状态中。 闭回路模式 :电机处于闭回路运行状态中。 五. 实验部分 首先分享一下我们搭建的主要控制电路 如上图,我们用直流 24V 电源给我的电机板就行供电,同时我的电机三项 UVW 分别接到主控电路板上面,而且我给电机上也装载了一个白色的小风扇,完全由我自己改装的小风扇。 接下来,我们给电路接上我们的示波器,通过示波器来观察我们的输入和输出的波形。 如上面的波形,我们可以发现上面的波形是有干扰的,对此我们进行改善我们的装置。输出的波形如下图所示: 对此,我们完成对电机的测试。通过测试,我们发现电机的运行良好,调速方便,可以快速的实现电机的转速的上升和控制。 六. 总结 不知不觉三周过去了,我已经开始慢慢掌握灵动电机的原理了,不敢说自己学会了全部的知识,但是自己敢说自己用心在学习了,用心学习的感觉,真好,像是在大海中航行的船一样,逐渐的驶向远在天边的彼岸,整个过程都是非常的踏实与安心的,因为自己在按照方向,不断的前进。 我还是想感谢灵动的工作人员,非常耐心的在群里指导,还有思思姐,不仅人长得非常好看,而且做事情也非常有条理,尽力的帮大家处理发货问题,对此,我表示衷心的感谢,我之所以走到今天,正是由于你们的帮助和付出,非常感谢灵动微电子了,非常喜欢你们的电路板。 关闭 关
  • 热度 4
    2019-10-2 17:51
    401 次阅读|
    0 个评论
    ​ 链接:https://pan.baidu.com/s/16MZ6UW02oRX5qLmxQrMRgg 提取码:y9lu
  • 热度 1
    2019-9-23 15:03
    496 次阅读|
    1 个评论
    抑制嵌入式系统设计的复杂性 作者: Lucio Di Jasio , Microchip 简介 Raspberry Pi 系列不久前通过全新的 Raspberry Pi Zero W1 ( 2017 年 2 月)扩充了产品线,这是一台支持无线连接的个人计算机,售价仅 10 美元。对于业余爱好者、制造商、工匠和黑客而言,它的意义非同寻常。是的,我们之中很少有人真正尝试做好我们的工作,即设计真正的(电子)产品!当我最近观看 Eben Upton 的视频公告时,我忍不住想起早年的经历。那是 80 年代中期,我买不起 BBC 电脑,也负担不起奢侈的 Amiga 。但我花光所有的钱购买了 Sinclair ZX Spectrum 。因此, Eben 努力实现“让所有人都买得起”的目标确实让我产生了共鸣。 一台功能强大的个人计算机塞进一块小巧的印刷电路板( PCB )上,确切地说是 6 x 3 cm 的印刷电路板,达到这种小尺寸的新记录着实让我惊叹。经过进一步思考,我经常想弄清楚是否正是 Spectrum 的简约及其诸多限制促使我深入研究计算机并最终沉醉于这一奇妙领域——软件和硬件之间的边界,我们今天称之为嵌入式。 小型片上系统 Raspberry Pi Zero 设计基于片上系统( SoC )( BCM2835 ),其中包括一个 1 GHz ARM® 内核和一个图形处理单元( GPU )、一个视频接口、多个串行接口( USB 、 UART 、 SPI 和 I2C )以及一个外部存储器接口,用于管理运行 Linux® 操作系统( OS )所需的大容量 RAM ( 512 MB DDR2 )和大容量存储卡( SD 卡)。对于单芯片器件来说,这些都是令人印象深刻的功能,特别是与我年轻时看到的早期个人计算机相比。我们可能会争辩,与目前在各种嵌入式控制应用中常用的最新简单型单片机相比,这并非不成比例。虽然时钟速度和处理能力都要低得多(从 10 MHz 到 100 MHz 不等),但今天所有小型单片机本身都是真正的小型片上系统奇迹。正如您对单片机期望的那样,所有 RAM 和闪存都位于芯片上。存在串行接口( USB 、 UART 、 SPI 和 I2C ),但也集成了所有电源调节和电压监控电路。片上通常有五个或更多不同的(精密)振荡器,以便获得更大的灵活性并控制功耗。此外,还有几个具有大输入 / 输出多路开关的模拟外设( ADC 、 DAC 、运算放大器和模拟比较器 ...... ),取代了 Raspberry Pi 幻想视频中的功能,一直以来反映出偏爱嵌入式超过计算的设计选择中的显著不同。 事实上,当 Raspberry Pi 用户需要与现实世界连接时,对于使常用 LED 闪烁等最平和 I/O 应用以外的应用而言,由更小的单片机(实际上通常为 8 位单片机)通过“帽子”(小型子板)提供必要的 I/O 接口和所需电压转换并不意外。 我不想在两个截然不同的世界之间将这种不公平的对比一直拖下去,但我必须指出,在支持开发人员方面,两者有一个共同关注的问题:“控制复杂性”,最终“吸引新用户”。毋庸置疑,它们的解决方案类似,但终究有所不同。 这两个平台都是由提供 免费 软件工具开始,包括集成开发环境( IDE )、编译器、链接器、模拟器、调试器(在专业版中提供,只需少量费用)、或多或少的开放式中间件和( RT- ) OS 以及一小部分硬件(板)选项。 两个阵营(嵌入式计算和通用计算)之间的差异比您想象的要小。两者最终都依赖于类似的(如果不相同)工具链,这些工具链大部分都基于 GNU 。在中间件级别,一旦您正确抽取下级(下至金属)驱动程序层,开源选项会再次变得极其相似。操作系统级别的差异最大,因为许多单片机将很愿意运行 RTOS ,但无法承受完整 Linux 内核的负担。这反映了真正的行业差异。实时是操作系统“工作说明”的一部分。 膨胀 查看文档时会发现,两者的 复杂度在膨胀 。我最喜欢的一个例子是基于流行 8 位 PIC® 架构的小巧而简单的单片机。 PIC16F1619 经常用于控制小家电,为此,它将小容量闪存( 16 KB )封装在 20 引脚微型封装中,具有十几个数字外设接口和几乎同样多的模拟支持模块。其数据手册长达 650 页, 之后 还增加了特性数据、表和图 2 。 此小型 SoC 上提供的一些外设(例如 信号测量定时器 )需要长达 50 页的篇幅才能适当记录。这几乎是描述实际 PIC 内核及其整个指令集所需页数的两倍。 在 Raspberry Pi 方面,如果只是按比例放大( 10 倍),则问题类似,因为有多个数据手册需要考虑,每个数据手册只记录片上系统硬件组件的一部分( SoC 外设、 GPU 和内核),内核单独占用超过 750 页的篇幅。 嵌入式软件架构 很明显,没有人能够阅读或跟上如此庞大的信息量。特别是嵌入式开发人员,他们总是承担着极大的压力,需要在更短的时间内完成应用,以实现最快的产品上市速度。常见的解决方案是使用分层 架构 对应用进行分区,并使用标准化 外设库 来 抽取 硬件详细信息。这些层可以整齐地形成协议栈,其中“应用”位于 硬件抽象层 ( HAL )的顶部。实际上,可以进一步细化此图片来完全识别 HAL , HAL 上方的 中间件 层将负责实现诸如网络、文件系统和图形 UI (如果存在 / 需要)一类的通用服务 / 功能。 图 1 :嵌入式应用的软件协议栈 注:通常通过从 HAL 分离驱动程序层和电路板支持层来进一步细化协议栈,但是在以下考虑中,我们不需要详细到这种程度。 此软件架构直接来源于“计算”领域,可以很好地对大多数通用案例进行建模。遗憾的是,由于它适用于嵌入式应用,因此有两个基本缺点: · 只要重点放在顶层中间件层提供的标准功能上,分层架构就可以简化 文档篇幅过长 的问题。在应用范围的底端,当中间件层(如果存在)非常薄时,结果大多比较 模糊 。开发人员必须依赖以大型应用编程接口( API )形式存在的 HAL 文档,这份材料的篇幅同样较长(可达数千页),但始终未真正研究器件的任何细节。出现问题时,他 / 她将身陷窘境或被迫深入研究陌生领域和大量代码。 · HAL 层为支持标准中间件服务提供了巨大帮助,但由于其性质极其严格,因此最终会清除特定器件的任何独特差异化功能。否则,这些独特功能可以为特定应用提供技术优势,并且可能成为选择特定器件型号的原因。 · 在应用范围的顶端,中间件层非常厚,例如 Raspberry Pi ,仅 Linux OS 内核就 添加了数百万行代码 来应对问题 3 。虽然可以说这是开源代码,但对于希望自己永远不必深入了解到如此程度的 普通 开发人员而言,它几乎无法带来安慰。 让计算机尽其所能! 最终, Raspberry Pi 开发人员将能够依靠“计算”性能带来的巨大收益和小电路板提供的大量资源。标准 Linux 操作系统的便利性远不止弥补 API 的复杂性和广泛性。 我最关心的是全新 小型 SoC 的开发人员:现代单片机用户。对于他们而言,使用标准化 HAL 的好处减少了,因为性能存在损失,而且堆叠软件架构使独特的功能变得单一。 用于快速开发的新一代软件工具代表了摆脱这一难题的巧妙方式。这是最近出现在嵌入式控制市场中的一种新型代码生成器或配置器。尽管最初时持有明显(但通常合理)的怀疑态度,但事实证明,这些工具不仅有效,对于任何严格的嵌入式开发人员也必不可少。 我们发现的显著特征包括: - 完全集成在常见的 IDE 中,这有助于其了解项目上下文:型号(器件编号)选择和中间件库感知。 - 支持独特和复杂的外设。例如,先前示例中提到的信号测量定时器( SMT )可以在 单个页面 / 对话框 中直观地呈现给用户,其中仅包含少数滚动列表、复选框和一些直观选项。有关来自 Microchip 的 PIC 单片机的旗舰快速开发工具 MPLAB® 代码配置器( MCC ) 4 的屏幕截图,请参见图 2 。 图 2 —— MPLAB 代码配置器:信号测量定时器选项 - 利用模板引擎,将配置选项转换为一小部分 完全自定义的函数 。这意味着只需通过少量待学习的函数以及一致且直观的命名约定便可生成最小 API 。函数定制保证大多数硬件抽象是在编译时(实际上在编译前)静态执行的。这有助于减少传递到每个函数所需的参数列表,从而提高性能和代码密度。有关 MPLAB 代码配置器的典型简约用例,请参见列表 1 。 - 输出由非常短的( C 语言)源文件组成,这些源文件可由用户全面检查(可将其作为一次学习机会),但也会经过专家进一步 手动优化 。现代化的代码生成器将其代码与用户代码灵活地混合,既可保持完整性,也允许充分利用宝贵的高级硬件功能。 void SMT1_Initialize(void) { // CPOL rising edge; EN enabled; SPOL high/rising edge enabled; SMT1PS 1:1 Prescaler; … SMT1CON0 = 0x80; // SMT1MODE Counter; SMT1GO disabled; SMT1REPEAT Single Acquisition mode; SMT1CON1 = 0x08; // SMT1CPRUP SMT1PR1 update complete; SMT1TS not incrementing; RST SMT1TMR1 update complete … SMT1STAT = 0x00; SMT1CLK = 0x00; // SMT1CSEL FOSC; SMT1WIN = 0x00; // SMT1WSEL SMTWINx; SMT1SIG = 0x00; // SMT1SSEL SMTxSIG; SMT1PRU = 0x00; // SMT1PR16 0x0; SMT1PRH = 0x00; // SMT1PR8 0x0; SMT1PRL = 0x00; // SMT1PR0 0x0; } void SMT1_DataAcquisitionEnable(void) { SMT1CON1bits.SMT1GO = 1; // Start the SMT module by writing to SMTxGO bit } void SMT1_SetPeriod(uint32_t periodVal) { // Write to the SMT1 Period registers 16); 8); SMT1PRL = periodVal; } 列表 1 ——由 MCC 生成、用于配置 SMT 外设的源文件( smt1.c )部分 从根本上说,代码配置器 / 生成器可将“计算机”执行的操作做到最好。构建 HAL 是硬件外设配置重复且容易出错的阶段,通常会导致在数据手册中花费大量时间进行乏味的搜索,现在,这一阶段现已然消失或显著缩短,只留下一些更加趣味横生、启发思维的探索与创造时间。 事实上,用户可以从同一个用户界面了解特定的硬件外设功能,从根本上消除(或至少极大减少)对数据手册的需求。 硬件抽象层成为项目的灵活部分,实际上可以根据需要频繁、快速地重新生成,从而优化应用性能。 十(二进制)行代码 处理完(外设)配置后,可将注意力立即集中到应用上,这是设计中更智能的部分(在应用层上),这一部分位于“主循环” 之内 ,而不是 之前 。 最后要说的是,凭借代码生成器,即使在嵌入式领域中,经典的“ Hello World ”示例(总是转换为使 LED 闪烁)也会成为令人耳目一新的两行代码练习! LED_Toggle(); __delay_ms(500); 列表 2 ——为创建第一个嵌入式“ Hello World ”而需要输入的短短两行代码 您将能够在我最近出版的书中找到( 20 个)更多关于同样有效利用快速开发工具的实例:“ In 10 Lines of Code ” 5 。 对抗复杂性 在小型单片机发展成为小型 SoC 或者个人计算机缩小为 Raspberry Pi 的过程中,不仅会浪费时间和造成认知负担,还会在我们操作无法完全理解 / 掌握的系统时引入 漏洞 。 复杂性 不是 技术进步的必然结果。现代化的代码配置器 / 生成器可以通过扩展我们的软件开发流程、实现自动化并最终恢复我们对快速增长的可用功能 / 选项数量的掌握来帮助我们。 链接 1- RaspberryPi ZeroW 公告。 https://www.raspberrypi.org/blog/raspberry-pi-zero-w-joins-family/ 2- PIC16F1619 数据手册。 http://microchip.com/pic16f1619 3- Linux 内核中的代码行。 https://arstechnica.com/business/2012/04/linux-kernel-in-2011-15-million-total-lines-of-code-and-microsoft-is-a-top-contributor/ 4- MPLAB 代码配置器。 http://microchip.com/mcc 5- In 10 Lines of Code 。 http://blog.flyingpic24.com/10lines 个人简历 Lucio Di Jasio 是 Microchip 的 EMEA 业务开发经理。过去 18 年来,他一直在公司 8 位、 16 位和 32 位部门担任各种技术和营销职位。作为一位固执己见的多产技术作家, Lucio 发表了大量文章和多部有关嵌入式控制应用编程的书籍。凭借对飞行的热情,他获得了 FAA 和 EASA 私人飞行员执照证书。您可以在他的博客上阅读更多关于 Lucio 最新书籍和项目的信息: http://blog.flyingpic24.com
相关资源
  • 所需E币: 3
    时间: 前天 10:20
    大小: 88.75MB
    上传者: abner_ma
    嵌入式Linux应用开发完全手册_韦东山全系列视频文档全集
  • 所需E币: 3
    时间: 5 天前
    大小: 1.91MB
    上传者: sense1999
    超长干货为你解析:从串口驱动到Linux驱动模型,嵌入式必会!
  • 所需E币: 3
    时间: 5 天前
    大小: 1.2MB
    上传者: sense1999
    超全!嵌入式必懂的CAN总线一文讲通了
  • 所需E币: 1
    时间: 6 天前
    大小: 260.66KB
    上传者: sense1999
    嵌入式系统基础知识总结:嵌入式系统基础
  • 所需E币: 2
    时间: 2020-11-18 10:26
    大小: 1.64MB
    上传者: 丸子~
    嵌入式燃气管道实时监测系统设计
  • 所需E币: 2
    时间: 2020-11-18 10:33
    大小: 2.49MB
    上传者: 丸子~
    智能家居嵌入式人脸识别门禁系统的设计与实现
  • 所需E币: 0
    时间: 2020-11-17 21:12
    大小: 5.8MB
    上传者: xgp416
    具有网络通信功能的嵌入式终端设计资源大小:5.8MB[摘要]嵌入式系统是计算机技术、半导体技术和电子技术的综合体,已经广泛应用于科学研究、工程设计、国防军事、自动化控制等各个领域。随着网络通讯技术的迅猛发展,生产和生活中广泛要求嵌入式系统终端能够完成网络通讯功能。论就是以ARM7TDMII为嵌入式开发平台,开发具有网络通信功能的嵌入式终端。
  • 所需E币: 4
    时间: 2020-11-17 21:14
    大小: 1.11MB
    上传者: xgp416
    LBS在嵌入式GIS中的应用研究资源大小:1.11MB[摘要]智能交通系统(InelligentTransportSysTem,简称ITS)智能交通系统将先进的信息技术、数据通讯传输技术、电子传感技术、电子控制技术以及计算机处理技术等有效地集成运用于整个交通运输管理体系,而建立起的一种在大范围内、全方位发挥作用的,实时、准确、高效的综合运输和管理系统。I
  • 所需E币: 4
    时间: 2020-11-17 20:51
    大小: 1.72MB
    上传者: xgp416
    [摘要]目前嵌入式主要开发环境有Linux、Wince等;Linux因其开源、开发操作便利而被广泛采用。而Linux操作系统也只是一个简单的操作系统,简单的使用对于嵌入式开发人员来说价值并不很高,真正有价值的是掌握Linux的基本服务和Linux的设计理念、思想,这对于嵌入式开发人员的长期发展是很极其
  • 所需E币: 5
    时间: 2020-11-17 21:01
    大小: 5.78MB
    上传者: xgp416
    [摘要]本书详尽、系统的介绍了ARM微处理器的教材。它不仅仅具体说明了微处理器的结构和原理,还介绍了设计微处理器和嵌入微处理器核心的片上系统(SOC)概念和方法。  本书介绍了ARM公司32位RISC微处理器的设计和操作,详细描述了ARM和Thumb指令集和存储管理体系结构
  • 所需E币: 4
    时间: 2020-11-17 21:10
    大小: 14.71MB
    上传者: xgp416
    全自动塑料管材热熔焊接机嵌入式控制系统设计资源大小:14.71MB[摘要]聚乙烯(PE)管道系统正在我国快速推广应用并逐渐代替传统的金属管道系统,连接技术是PE管道系统应用中的关键技术,连接的质量对PE管道系统整体寿命有巨大影响。热熔对接焊是PE管户外最常用的一种连接技术,有焊接过程复杂,工艺参数多的特点,对焊接机的自动化程度要求较高。然而,目前国内工程上所使用的热
  • 所需E币: 3
    时间: 2020-11-17 20:00
    大小: 49.7KB
    上传者: xgp416
    [摘要]HC-05嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输;当模块处于命令
  • 所需E币: 2
    时间: 2020-11-16 17:29
    大小: 1.61MB
    上传者: SnailWillow
    本文首先描述了系统设计的整体思路,然后分章节讲解了各个模块设计中的技术细节,主要包括以下几部分:1.系统整体工作流程。2.算法模块中双电源的设计和存储器扩展。3.控制模块的结构以及数据总线时分复用的实现。4.控制模块与算法模块之间通信接口的设计。5.采用擦刮式指纹传感器AES2510和DSP构成的采集模块的硬件设计,采集程序以及指纹重组的原理及实现。6.以单片机和USB芯片PDIUSBDl2构成的USB设备接口的硬件实现和固件程序开发,以及PC机上的驱动程序和应用程序的开发。最后为系统的进一步优化提出了建议。实验证明本系统设计比较合理、方案可行性高、有较强的实用价值和广阔的应用前景,并对采用DSP和单片机双处理器为核心来构建嵌入式系统的方案,以及嵌入式系统中USB接口的实现提供了一些有价值的参考。
  • 所需E币: 2
    时间: 2020-11-16 17:35
    大小: 1.16MB
    上传者: SnailWillow
    设计了光学指纹识别模块的控制电路,实现了指纹的录入和识别功能。首先搭建了基于LPC900系列单片机编程器的编程系统。使用FlashMagic(V5.4)软件,用ICP与Pc连接是通过USB接口电路,同时设计了一个硬件复位电路。用该系统对指纹识别模块的工作原理、流程、控制指令进行研究和调试。在充分了解其内部命令和工作原理后,设计了基于单片机的指纹识别系统的控制电路。该控制电路以P89LPC922+单片机为控制核心,指纹识别模块为控制信号采集器,LED灯和按键为人机交互。
  • 所需E币: 2
    时间: 2020-11-16 17:36
    大小: 431.72KB
    上传者: SnailWillow
    祚皋于strongRAM祭础I:设计并实现j,指纹门禁系统。系统采用厂世界允进指纹采集心i1-门1.,具有安伞日J’靠、易十扩展、可联叫使用、价格低廉等优点,可广泛心用于符种需要进行身份识别的场所。通过,荔校自动化专业毕业生参加科研和毕业设计,神;指导教9ili的帮助指导下,完成r硬件I乜路的i52计,.’j软件部分的C程序交互并调试和运行?使学生从中学到r嵌入式I乜子lU路的112计和程序仿真
  • 所需E币: 1
    时间: 2020-11-16 17:39
    大小: 2.69MB
    上传者: SnailWillow
    针对目前驾校普遍存在的使用假指纹打卡作弊的行为,设计了一种新型的双重识别防作弊系统。该系统采用指纹识别与实时人脸认证相结合的技术进行身份验证,并可通过GSM网络向学员发出防作弊的警示信息。系统以三星$3C6410为核心处理器,基于嵌入式Linux开发环境,使用Qt进行界面(ui)设计。在实验室的人脸数据库上经过多次模拟测试,结果表明该系统稳定可靠,准确度较高,对驾校学习中的指纹造假作弊行为具有很好的遏制作用。
  • 所需E币: 1
    时间: 2020-11-16 17:42
    大小: 308KB
    上传者: SnailWillow
    刮擦式指纹传感器具有体积小.功耗低的优点,适合于构建嵌入式自动指纹识别系统.介绍了一种基于WindowsCE操作系统和AES2510刮擦式指纹传感器的嵌入式自动指纹识别系统,着重阐述了基于流接口驱动模型的指纹传感器驱动程序的实现,以及基于像素灰度级变化统计信息的滑动指纹序列拼接算法。测试结果表明,系统运行效率高,占用处理器资源小.
  • 所需E币: 1
    时间: 2020-11-16 17:52
    大小: 1.1MB
    上传者: SnailWillow
    利用人体指纹具有的唯一性,指纹识别系统越来越多地用于各种机密系统,同时,随着嵌入式指纹识别系统的快速发展,其正倾向于变得更小巧、轻便。因此,研制体积小、识别率高的指纹识别系统已经成为了嵌入式指纹识别领域的趋势。通过分解光焦度的设计方法、采用双高斯的对称光学成像结构、利用Scheimpflug条件设计指纹识别系统,其体积是在市面上现有产品体积的基础上减小了50%,且可以嵌入到考勤机,保险柜,二代身份证等等系统当中。在缩小体积的同时也提高了指纹识别系统的识别率。由于这种指纹识别系统体积小、识别率高、易加工等各种优点,很有普及价值。
  • 所需E币: 0
    时间: 2020-11-16 18:00
    大小: 7.59MB
    上传者: SnailWillow
    在嵌入式越全识别领域,传统的硬件实现解决方案,如壤成电路fASIC),能够满足系统的功能和性能的要求,但是此方案缺乏灵活性和可配黄性。以及小能很好的拓展功能,提高性能;传统的软件实现方案,如基于通J{J处理器的方法,是一种灵活的解决方案,但是枉『对于硬件实现方案需要更高的成本币¨史多的功耗,为r利用指纹识别、拼码学机制、硬件实现、以投软件实现的优势.并克服它们的弱势,本文提出了一个融含的共享密钥认证和指纹识别的软艘什协『州按入式安全认1ll·系统,集合r传统南码学认证和指纹识别认证的坝重忧辨。拍先它利用指纹谚l别构建商nr靠性的身份认证:其次它通过共享密铡认iff:f*lIr丁交互式认¨f·确一信息处理和信脚、传输方岍的安全性。理|^分析和实验表叫,眩系统小仪达到r微高指纹汉刖卒.埘iq具有报商的安全性.能够抵御重放攻ti-、埘J】[{务器}R纹{5l板攻.饥H肚计崭户端模扳的攻击
  • 所需E币: 1
    时间: 2020-11-16 18:06
    大小: 1.96MB
    上传者: SnailWillow
    为了克服基于PC平台的指纹识别系统体积较大、可移动性不佳、不便于携带等不足,对嵌入式技术实现的指纹识别系统进行研究。对指纹识别算法进行分析,从硬件与软件两个方面着手,使用S3C2410微处理器与MBF200指纹采集传感器为硬件核心,拓展必要的外部设备,设计完成指纹识别系统。经过实际测试,该指纹识别系统具有实时性好、识别准确率高的优点,体积轻便、便于移动,为同类产品的设计研究提供参考依据
广告