1.探究(一)——NB-IOT基础知识
2.鸿蒙轻内核M核源码分析:中断Hwi
3.STM32L431移植华为LiteOS 物联网手把手教程
4.为ä»ä¹è¦ç¨CMSIS RTOS
5.å¦ä½ä½¿ç¨stm32
6.å¦ä½å¨MDKä¸å»ºç«stm32å·¥ç¨
探究(一)——NB-IOT基础知识
揭开NB-IOT神秘面纱:一项革命性的物联网技术探索 NB-IOT,即窄带蜂窝物联网,是物联网领域的一个重要分支,以其低功耗、广覆盖和低成本的特性,为万物互联提供了全新的拟态化网站源码解决方案。它旨在让低能耗设备在大范围的蜂窝网络中实现高效数据连接,被誉为低功耗广域网技术。 硬件环境构建 在实际开发中,我们选择了江苏学蠡信息科技有限公司的无线传感器网络实验平台,这个平台集成了多种功能,如NB-IOT、LoRa和ZigBee等。其模块化设计,如更换插件,使构建传感器网络变得极为便捷。所有操作,包括NB-IOT模块的配置,都在平台左侧的怎样将源码发布液晶扩展板上进行。 扩展板的左侧,关键组件包括NB-IOT核心模块LPMD,由NB-IOT模块lierda NB-G、网卡、STMFT8U6单片机以及保护模组天线构成。通过与ST-Link仿真器相连,可实现PC端的数据交互。方向按键则根据接入的不同传感器,执行相应的操作。 中间区域的多功能传感器接口 传感器模块接口支持多种传感器接入,配合NB-IOT技术,可实现丰富多样的功能。串口功能选择器在使用时需调整到正确位置,液晶显示器则实时显示传感器信息。 右侧区域,电源开关和按键复位功能必不可少。每次下载新代码后,都需要通过按键复位来确保节点的阴阳换手源码下载初始化。 注意事项与软件环境 在使用NB-IOT时,需注意板子的拆卸需断电,天线尽量使用短线,电源电压需保持在V,且启动按钮需向上拨动以启动。在MDK集成环境Keil工具中,编写代码时务必正确配置头文件路径和文件类型,以确保编译顺利。HAL库作为核心驱动,为STM芯片提供了强大的功能支持,通过学习其API函数,可以极大地简化开发过程。 STMCubeMX的入门之旅 ST公司的STMCubeMX是一款图形化代码生成工具,它能快速生成初始化代码,让开发者专注于业务逻辑。从创建新工程、配置时钟源,到配置IO口和系统时钟,php项目源码结构每一步都有详细的指导。一个跑马灯小实验将演示如何使用STMCubeMX进行项目开发,一步步引导你创建和配置一个实际工程。 最后,工程文件结构包括:头文件和源代码文件在Inc和Src文件夹,HAL库和CMSIS文件在Drivers文件夹,以及MDK-ARM工程文件和STMCubeMX工程文件。在Keil5中,确保下载工具配置正确后,你将在main.c中编写基础代码,如LED灯的交替闪烁,验证你的NB-IOT设备是否已成功连接和工作。 通过上述深入的硬件和软件环境介绍,你将对NB-IOT技术有更全面的理解,并准备好在实际项目中应用这一创新技术。鸿蒙轻内核M核源码分析:中断Hwi
在鸿蒙轻内核源码分析系列中,本文将深入探讨中断模块,旨在帮助读者理解中断相关概念、源码编译系统安装鸿蒙轻内核中断模块的源代码实现。本文所涉及源码基于OpenHarmony LiteOS-M内核,读者可通过开源站点 gitee.com/openharmony/k... 获取。中断概念介绍
中断机制允许CPU在特定事件发生时暂停当前执行的任务,转而处理该事件。这些事件通常由外部设备触发,通过中断信号通知CPU。中断涉及硬件设备、中断控制器和CPU三部分:设备产生中断信号;中断控制器接收信号并发出中断请求给CPU;CPU响应中断,执行中断处理程序。中断相关的硬件介绍
硬件层面,中断源分为设备、中断控制器和CPU。设备产生中断信号;中断控制器接收并转发这些信号至CPU;CPU在接收到中断请求后,暂停当前任务,转而执行中断处理程序。中断相关的概念
每个中断信号都附带中断号,用于识别中断源。中断优先级根据事件的重要性和紧迫性进行划分。当设备触发中断后,CPU中断当前任务,执行中断处理程序。中断处理程序由设备特定,且通常以中断向量表中的地址作为入口点。中断向量表按中断号排序,存储中断处理程序的地址。鸿蒙轻内核中断源代码
中断相关的声明和定义
在文件 kernel\arch\arm\cortex-m7\gcc\los_interrupt.c 中定义了结构体、全局变量和内联函数。关键变量 g_intCount 记录当前正在处理的中断数量,内联函数 HalIsIntActive() 用于检查是否正在处理中断。中断向量表在中断初始化过程中设置,用于映射中断号到相应的中断处理程序。中断初始化 HalHwiInit()
系统启动时,在 kernel\src\los_init.c 中初始化中断。HalHwiInit() 函数在 kernel\arch\arm\cortex-m7\gcc\los_interrupt.c 中实现,负责设置中断向量表和优先级组,配置中断源,如系统中断和定时器中断。创建中断 HalHwiCreate()
开发者可通过 HalHwiCreate() 函数注册中断处理程序,传入中断号、优先级和中断模式。函数内部验证参数,设置中断处理程序,最终通过调用 CMSIS 函数完成中断创建。删除中断 HalHwiDelete()
中断删除操作通过 HalHwiDelete() 实现,接收中断号作为参数,调用 CMSIS 函数失能中断,设置默认中断处理程序,完成中断删除。中断处理执行入口程序
默认的中断处理程序 HalHwiDefaultHandler() 仅用于打印中断号后进行死循环。HalInterrupt() 是中断处理执行入口程序的核心,它包含中断数量计数、中断号获取、中断前后的操作以及调用中断处理程序的逻辑。开关中断
开关中断用于控制CPU是否响应外部中断。通过宏 LOS_IntLock() 关闭中断, LOS_IntRestore() 恢复中断状态, LOS_IntUnLock() 使能中断。这组宏对应汇编函数,使用寄存器 PRIMASK 控制中断状态。小结
本文详细解析了鸿蒙轻内核中断模块的源代码,涵盖了中断概念、初始化、创建、删除以及开关操作。后续文章将带来更多深入技术分享。欢迎在 gitee.com/openharmony/k... 分享学习心得、提出问题或建议。关注、点赞、Star 和 Fork 到个人账户,便于获取更多资源。STML移植华为LiteOS 物联网手把手教程
本文详细介绍了STML与华为LiteOS的移植教程,主要针对EVB_M1开发板进行操作。首先,你需要准备硬件环境,包括EVB_M1开发板和STlink仿真器,以及MDK ARM集成开发环境和相应的芯片支持包。软件环境则涉及MDK5.和STMCubeMX工具。
环境准备完成后,开始内核移植过程。使用STMCubeMX建立STMLRCT6裸机工程,配置引脚、时钟和功能模块。裸机工程生成后,将LiteOS源码(从GitHub下载并切换到develop分支)加入到工程中,主要关注arch、components/cmsis和kernel目录的内容。
内核移植涉及具体步骤,如使用STMCubeMX创建工程,配置内核源码,特别是加入CMSIS OS代码、内核代码和平台相关的los_dispatch_keil.S文件。同时,需修改target_config.h以适应板级配置,创建LiteOS任务并在main.c中初始化和启动内核。
在编译下载时,注意可能遇到Systick和pendsv函数重复定义的问题,需在相关文件中添加__weak关键字。最后,配置合适的 LiteOS 参数以优化资源使用。完成以上步骤后,你将在EVB_M1开发板上看到LiteOS的运行效果。
欲了解更多详情,请关注相关教程和华为云原创内容。
为ä»ä¹è¦ç¨CMSIS RTOS
1ãéæå¨keilä¸ï¼æ²¡ææè°ç§»æ¤æ¦å¿µãé对任ä½MCUé½å¯ä»¥ä¸é®æ·»å ï¼è¯æ³ä¸ä¸ï¼å¦æä½ å°æ¥ç¨çä¸æ¯STMï¼é£ä¹ç§»æ¤OSæ¯ä¸æ¯è¿æ¯é£ä¹å®¹æï¼ï¼
2ãå ç¨èµæºæå°ã大约5kBï¼èä¸é对cortexç³»åARMå®æ¹ä¼åï¼æçä¸è¨èªæï¼
3ãç»ä»¶ä¸°å¯ã常ç¨ä¸é´ä»¶USB/network/GUI/æ件系ç»çï¼ARMå®æ¹å·²ç»åå¤å¥½ï¼åªéè¦å¨keilä¸ä¸é®æ·»å ï¼åæ ·æ²¡æ移æ¤æ¦å¿µï¼
4ã仿çé常æ¹ä¾¿ãå¨keilçdebug模å¼ä¸ï¼è½»æ¾æ¥çä»»å¡çCPUãå åå ç¨ï¼è¿æåä»»å¡çè¿è¡æ¶é´ãè¿è¡ç¶æï¼åä»»å¡ä¹é´å¦ä½æ¢å ï¼é常ç´è§ï¼ä¸éè¦åå ¶ä»RTOSé£æ ·è°ç¨ä¸ç¨çæ¥çå½æ°ï¼
5ãCMSIS RTOSæ¯ARMç°å¨çæ¨çç©èç½æä½ç³»ç»mbedOSçåºç¡ï¼ææè¿ä¸ªRTOS APIï¼mbedOSæ´å®¹æä¸æï¼ç©èç½æ¯å¤§å¿æè¶ï¼ARMçå¨è¿ä¸ªæµªæ½®ä¸çå°ä½ä¼æå¨ç¥ï¼è½¯é¶æ¶è´ARMçæ ¸å¿åå ï¼ï¼ç©èç½ä»¥å估计ä¼äº§ç大éçç¸å ³å·¥ä½æºä¼ï¼
6ã使ç¨æç®åãå次æéï¼CMSIS RTOSåªæ¯ä¸å¥APIï¼æå ´è¶£çå¯ä»¥å»ç 究å®å°è£ OSæºç ï¼æ²¡å ´è¶£çï¼ççAPIæ¿æ¥å°±ç¨ï¼
7ãå è´¹ï¼è¿ç¹åfreeRTOSä¸æ ·ï¼æ¯uc/oSæ´ææ½åï¼ä¸è¿freeRTOSæ¯ä¸ªäººå¼æºé¡¹ç®ï¼åç»å级维æ¤ç¼ºä¹åä¸æ¨¡å¼ï¼èARMåä»è½¯é¶é£éææ¥å¤§ç¬é±ï¼ä¼°è®¡åç»åå±æ¨å¹¿æ´ä¸ºå¼ºå²ï¼è¯è¯´åæ¥ï¼å¦æfreeRTOSççé常ä¼ç§ï¼ARMä¹å¯ä»¥å¯¹å®è¿è¡å°è£ ã
å¦ä½ä½¿ç¨stm
å ³äºè·åSTå ¬å¸çSTMåºä»¶åºæºç ï¼æå ç§æ¹æ³ãæ们å¯ä»¥å¨ç¾åº¦ä¸æï¼ç½ä¸æè¿è¡äºå享ï¼ä¹å¯ä»¥å°STå ¬å¸çå®ç½è¿è¡æ¥æ¾å¹¶ä¸è½½ãä¸è¿ï¼å¦æè±æä¸å¥½çè¯ï¼è¦å¨å®ç½ä¸æ¾å°STMåºä»¶åºç¡®å®æ¯ä»¶å¾ååçäºãå¨å®ç½ä¸å¯ä»¥æ ¹æ®è±ææ示æä¸åæ¡ä»¶è¿è¡çéï¼å ·ä½æä½å¦ä¸å¾æ示ï¼
END
第äºæ¥ï¼æ°å»ºå·¥ç¨æ件夹ââãSTMå·¥ç¨æ¨¡æ¿ã
é¦å ï¼æ°å»ºå·¥ç¨æ件夹ãSTMå·¥ç¨æ¨¡æ¿ãï¼ç¶ååå¨è¯¥æ件夹ä¸æ°å»º6个æ件夹ï¼åå«ä¸ºï¼ãDocãããLibrariesãããListingãããOutputãããProjectãåãUserããå ¶ä¸ï¼ãDocãç¨äºåæ¾åç§è¯´æææ¡£ï¼ãLibrariesãç¨äºåæ¾åç§åºæ件ï¼ãListingãç¨äºåæ¾ç¼è¯æ¶äº§ççä¸é´æ件ï¼ãOutputãç¨äºåæ¾çæçä¸è½½æéçæ件ï¼ãProjectãç¨äºåæ¾å·¥ç¨æ件ï¼ãUserãç¨äºåæ¾ç¨æ·æ件ï¼å³æ们èªå·±ç¼åçåç§æºæ件ãå ·ä½æ åµå¦ä¸å¾æ示ï¼
END
第ä¸æ¥ï¼å建ç«çå·¥ç¨æ件夹ä¸æ·»å åºæ件
å°åºæ件ä¸çincåsrcæ件夹å¤å¶å°æ¨¡æ¿å·¥ç¨æ件夹ä¸çFWLIBæ件夹ãå ·ä½æä½æ åµå¦ä¸å¾ï¼
å°åºæ件ä¸CoreSupportæ件夹ä¸çæ件å¤å¶å°å·¥ç¨æ¨¡æ¿æ件夹ä¸çCMSISæ件夹ãå ·ä½æä½æ åµå¦ä¸å¾ï¼
å°åºæ件ä¸DeviceSupportæ件夹ä¸çç¸å ³æ件å¤å¶å°å·¥ç¨æ¨¡æ¿æ件夹ä¸çCMSISæ件夹ãå ·ä½æä½æ åµå¦ä¸å¾ï¼
å°åºæ件ä¸startupæ件夹ä¸armä¸çæä»¶å ¨é¨å¤å¶å°å·¥ç¨æ¨¡æ¿æ件夹ä¸çstartupæ件夹ãå ·ä½æä½æ åµå¦ä¸å¾ï¼
å°åºæ件ä¸Projectæ件夹ä¸çç¸å ³æ件å¤å¶å°å·¥ç¨æ¨¡æ¿æ件夹ä¸çUseræ件夹ä¸ãå ·ä½æä½æ åµå¦ä¸å¾ï¼
第åæ¥ï¼ä½¿ç¨MDKï¼Keilï¼æ°å»ºå·¥ç¨æ¨¡æ¿
é¦å å¾éæ©CPUï¼è¿ä¸ªå¨æ°å»ºå·¥ç¨æ¶ï¼ä¼æä¸ä¸ªéæ©è¯çççé¢ï¼æ们åªéææ示以åèªå·±çå®é æ åµæ¥éæ©å°±å¥½äºãå ·ä½æä½æ åµå¦ä¸å¾ï¼
æ´æ¹å·¥ç¨åï¼å°é»è®¤çå·¥ç¨åæ¹ä¸ºâTemplateâçæ¹æ³ï¼éä¸å·¥ç¨ï¼æâF2âé®ï¼å¹¶ä¸ºå·¥ç¨æ·»å 项ç®ç»ï¼Add group to projectï¼ãå ·ä½æä½æ åµå¦ä¸å¾ï¼
åå«åå个项ç®ç»ä¸æ·»å æ们ååä»åºä¸å¤å¶è¿æ¥çæ件æ件ï¼Add files to groupï¼ãå ·ä½æä½æ åµå¦ä¸å¾ï¼
第äºæ¥ï¼å·¥ç¨é ç½®
å¦ä½å¨MDKä¸å»ºç«stmå·¥ç¨
1.解åstmfx_stdperiph_lib.zip å¯ä»¥ä»STå®æ¹ç½ç«å è´¹ä¸è½½ã
2.å建ä¸ä¸ªDemoæ件夹
2.1 æ°å»ºåæ件夹Userï¼ç¨äºåæ¾ç¨æ·æºç¨åº
2.2 æ°å»ºåæ件夹Projectï¼ç¨æ·KEILå·¥ç¨æ件
2.3 å¨Projectä¸ä¾æ¬¡å建ObjåListåæ件夹ï¼åæ¾ç¼è¯è¿ç¨ä¸äº§ççä¸é´æ件ã
3. å¤å¶æºä»£ç å°Demoæ件夹
3.1 å°stmfx_stdperiph_lib\STMFx_StdPeriph_Lib_V3.1.2Librariesæ件æ´ä½å¤å¶å°Demoæ件夹ä¸ãè¿å°±æ¯STçæ ååºï¼æ¯ä»¥æºä»£ç å½¢å¼æä¾çã
3.2 å°åºä¸çæ¼ç¤ºä»£ç IOToggleä¸çæ件å¤å¶å°Demo\Useræ件夹.
4. æ°å»ºä¸ä¸ªKeil MDKå·¥ç¨
4.1 å¯å¨Keil MDKï¼ç¹å»èå New uVision Projectï¼ç¶åæå导è¿è¡æä½
4.2 éæ©CPUç±»å为 STMFZE ï¼è¿æ¯å®å¯è±STMå¼åæ¿éç¨CPUç±»åï¼
4.3 å½æ示æ¯å¦å¤å¶å¯å¨ä»£ç æ¶ï¼è¯·éæ©å¦ãï¼æ们ç¨ææ°çåºä¸çå¯å¨ä»£ç ï¼ä¸ç¨Keil软件èªå¸¦çæ§çæ¬å¯å¨æ件ï¼
4.4 æ ¹æ®èªå·±çéè¦ä¿®æ¹Targetååãï¼ååä»»æï¼
4.5 为äºä¾¿äºä»£ç 管çï¼å¨è¿ä¸ªProjectä¸å建å 个Group (ååå¯ä»¥ä»»æ)
User : åæ¾ç¨æ·èªå·±åçæºä»£ç
RVMDK : åæ¾å¯å¨æ件ï¼æ±ç¼æ件ï¼
StdPeriph_Driver : åæ¾STæ ååºæ件
CMSIS : åæ¾CMSISæ¥å£æ件ï¼è¿ä¹æ¯åºçä¸é¨åï¼
4.6 å建好Groupåï¼æ们å¼å§ä¾æ¬¡æ·»å æ件ã
5. ä¿®æ¹æºä»£ç ãæ们å°ä¿®æ¹main.c æ件ï¼æ¢ææ们èªå·±è·é©¬ç¯ç¨åºã
6. é 置工ç¨, ç¹å»âOptionsâæé®
6.1 åæ¢å°Outputã
éæ©Objectæ件夹ã
å¨Create Hex File åæé©ã
6.2 åæ¢å¸¦Listingã
éæ©Listingsæ件夹
6.3 åæ¢å°C/C++
æ·»å 两个é¢ç¼è¯å® STMFX_HD, USE_STDPERIPH_DRIVER ï¼è¿æ¯STåºç¨å°äºè¿ä¸¤ä¸ªå®ï¼
ä¿®æ¹Includesè·¯å¾
6.4 åæ¢å°Debug
éæ©ç¡¬ä»¶è°è¯å¨ï¼ç¼ºçæ¯è½¯ä»¶ä»¿çï¼ï¼æ们éæ©Cortex-M3 J-Linkè°è¯å¨
å Run to mainåæé©
6.4 åæ¢å°Utilities
éé¢è°è¯å¨ç±»åï¼æ们éæ©Cortex-M3 J-Link
ç¹settingsæé®ï¼æ·»å Flashç¼ç¨ç®æ³ï¼æ们éæ©STMé«å¯åº¦å¨ä»¶ï¼Flash容éKåè
7. é 置工ç¨å®æ¯ãä¸é¢å¼å§ç¼è¯ã
8. ç¼è¯OKï¼å¼å§è°è¯ã
9. æç¨ç»æã
å·²ç»è®²å¾å¾æ¸ æ¥äºå§ï¼å¦æè¿æä»ä¹çé®å¯ä»¥åé®ææè èç³»æã