Advertisement

正点原子STM32的QP移植.zip

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本资源包包含了STM32微控制器上QMosaic有限状态机框架的移植代码和示例程序,适用于嵌入式系统开发人员进行高效的状态机设计。 为了在STM32F103单片机上使用正点原子战舰V3开发板成功移植QP(QP框架),需要按照以下步骤搭建: 定义队列长度: ```cpp #define RED_QUEUE_LEN 3 #define BLUE_QUEUE_LEN 3 ``` 事件池大小为红色和蓝色队列的总和: ```cpp #define TACKER_EVENT_POOL_LEN (RED_QUEUE_LEN + BLUE_QUEUE_LEN) ``` 声明静态变量用于存储队列和事件池: ```cpp static QEvt const * l_redQueueSto[RED_QUEUE_LEN]; // 红色事件队列 static QEvt const * l_blueQueueSto[BLUE_QUEUE_LEN]; // 蓝色事件队列 // 事件池,包含所有可能的信号和状态信息 static LedEvt LedEvtPoolSto[TACKER_EVENT_POOL_LEN]; // 订阅列表初始化 static QSubscrList SubSrcSto[MAX_PUB_SIG]; ``` 定义Led信号枚举: ```cpp enum LedSignals{ START_SIG = Q_USER_SIG, KEY0_SIG, KEY1_SIG, KEY2_SIG, KEYUP_SIG, ALL_OFF_SIG, ONLY_BULE_SIG, ONLY_RED_SIG, ALL_ON_SIG, MAX_PUB_SIG }; ``` 定义Led事件结构: ```cpp typedef struct LedEvtTag{ QEvt super_; // 超类指针,用于继承自QF框架中的基础类型 uint16_t uiParaH; uint16_t uiParaL; }LedEvt; // 发布信号的函数 void PublishLedEvt(uint16_t uiSig, uint16_t uiParaH, uint16_t uiParaL) { LedEvt* peTacker = Q_NEW(LedEvt, uiSig); peTacker->uiParaH = uiParaH; peTacker->uiParaL = uiParaL; QF_publish((QEvt*)peTacker); // 发布事件到QP框架 } ``` 初始化步骤: ```cpp // 初始化时间管理器、活动对象查找表和优先级集合 QF_init(); // 为订阅列表初始化内存池 QF_psInit(SubSrcSto, Q_DIM(SubSrcSto)); // 初始化事件池内存分配 QF_poolInit(LedEvtPoolSto,sizeof(LedEvtPoolSto),sizeof(LedEvtPoolSto[0])); RedLed_Start(uiPrio++, l_redQueueSto, Q_DIM(l_redQueueSto), 0, 0); // 创建红色活动对象 BlueLed_Start(uiPrio++, l_blueQueueSto, Q_DIM(l_blueQueueSto), 0, 0); ``` 定义红色LED的活动类型: ```cpp typedef struct RedActiveTag{ QActive super_; volatile uint16_t RedLedStateNow; // 红色LED当前状态 uint16_t a; uint16_t b; }RedActive; extern RedActive RedLed; // 外部声明 // 初始化红色活动对象的实例化函数 void RedLed_Start(uint_fast8_t prio, QEvt const *qSto[], uint_fast16_t qLen, void *stkSto, uint_fast16_t stkSize) { RedLed_Ctor(&RedLed); // 创建一个线程并开始管理活动对象 QActive_start((QActive*)&RedLed;, prio, qSto, qLen, stkSto, stkSize); } // 初始化红色LED的状态机基础类和初始状态 void RedLed_Ctor(RedActive* me) { QActive_ctor(&me->super_, (QStateHandler)RedLed_Initial); // 设置当前状态为0,具体实现可以根据需要调整 me->RedLedStateNow = 0; } ``` 以上步骤确保了QP框架在STM32F103单片机上的正确初始化和事件发布。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • STM32QP.zip
    优质
    本资源包包含了STM32微控制器上QMosaic有限状态机框架的移植代码和示例程序,适用于嵌入式系统开发人员进行高效的状态机设计。 为了在STM32F103单片机上使用正点原子战舰V3开发板成功移植QP(QP框架),需要按照以下步骤搭建: 定义队列长度: ```cpp #define RED_QUEUE_LEN 3 #define BLUE_QUEUE_LEN 3 ``` 事件池大小为红色和蓝色队列的总和: ```cpp #define TACKER_EVENT_POOL_LEN (RED_QUEUE_LEN + BLUE_QUEUE_LEN) ``` 声明静态变量用于存储队列和事件池: ```cpp static QEvt const * l_redQueueSto[RED_QUEUE_LEN]; // 红色事件队列 static QEvt const * l_blueQueueSto[BLUE_QUEUE_LEN]; // 蓝色事件队列 // 事件池,包含所有可能的信号和状态信息 static LedEvt LedEvtPoolSto[TACKER_EVENT_POOL_LEN]; // 订阅列表初始化 static QSubscrList SubSrcSto[MAX_PUB_SIG]; ``` 定义Led信号枚举: ```cpp enum LedSignals{ START_SIG = Q_USER_SIG, KEY0_SIG, KEY1_SIG, KEY2_SIG, KEYUP_SIG, ALL_OFF_SIG, ONLY_BULE_SIG, ONLY_RED_SIG, ALL_ON_SIG, MAX_PUB_SIG }; ``` 定义Led事件结构: ```cpp typedef struct LedEvtTag{ QEvt super_; // 超类指针,用于继承自QF框架中的基础类型 uint16_t uiParaH; uint16_t uiParaL; }LedEvt; // 发布信号的函数 void PublishLedEvt(uint16_t uiSig, uint16_t uiParaH, uint16_t uiParaL) { LedEvt* peTacker = Q_NEW(LedEvt, uiSig); peTacker->uiParaH = uiParaH; peTacker->uiParaL = uiParaL; QF_publish((QEvt*)peTacker); // 发布事件到QP框架 } ``` 初始化步骤: ```cpp // 初始化时间管理器、活动对象查找表和优先级集合 QF_init(); // 为订阅列表初始化内存池 QF_psInit(SubSrcSto, Q_DIM(SubSrcSto)); // 初始化事件池内存分配 QF_poolInit(LedEvtPoolSto,sizeof(LedEvtPoolSto),sizeof(LedEvtPoolSto[0])); RedLed_Start(uiPrio++, l_redQueueSto, Q_DIM(l_redQueueSto), 0, 0); // 创建红色活动对象 BlueLed_Start(uiPrio++, l_blueQueueSto, Q_DIM(l_blueQueueSto), 0, 0); ``` 定义红色LED的活动类型: ```cpp typedef struct RedActiveTag{ QActive super_; volatile uint16_t RedLedStateNow; // 红色LED当前状态 uint16_t a; uint16_t b; }RedActive; extern RedActive RedLed; // 外部声明 // 初始化红色活动对象的实例化函数 void RedLed_Start(uint_fast8_t prio, QEvt const *qSto[], uint_fast16_t qLen, void *stkSto, uint_fast16_t stkSize) { RedLed_Ctor(&RedLed); // 创建一个线程并开始管理活动对象 QActive_start((QActive*)&RedLed;, prio, qSto, qLen, stkSto, stkSize); } // 初始化红色LED的状态机基础类和初始状态 void RedLed_Ctor(RedActive* me) { QActive_ctor(&me->super_, (QStateHandler)RedLed_Initial); // 设置当前状态为0,具体实现可以根据需要调整 me->RedLedStateNow = 0; } ``` 以上步骤确保了QP框架在STM32F103单片机上的正确初始化和事件发布。
  • FreeModbus在STM32F407上从机
    优质
    本文介绍了如何将FreeModbus协议栈移植到基于STM32正点原子F407开发板的从机系统上,实现串口Modbus RTU通信。 根据相关文章做的移植工作,有兴趣的朋友可以查阅一下。
  • 基于STM32F407FreeRTOS项目.zip
    优质
    本项目为基于正点原子STM32F407开发板的FreeRTOS实时操作系统移植与应用实践,旨在帮助开发者深入理解嵌入式系统编程。 基于正点原子STM32F407的FreeRTOS移植工程包含了针对该开发板进行优化配置的相关文件和示例代码,便于用户快速上手使用FreeRTOS操作系统。此项目旨在帮助开发者更好地理解和应用实时操作系统在嵌入式系统中的实际操作与调试技巧。
  • LCDCubemx精英版
    优质
    《正点原子LCD的Cubemx移植精英版》是一本专注于STM32微控制器开发的技术书籍,通过详细讲解如何使用CubeMX工具进行LCD屏幕驱动程序移植,帮助读者掌握高级嵌入式系统设计技巧。 其中的LCD可以直接添加到生成好的lcd.c和lcd.h文件中,并不需要在Cubemx中进行额外配置,在主程序中调用LCD_Init()即可。如果需要单独配置,则需注释掉fsmc和PBout0的初始化部分。建议直接使用,先学会应用,无需深入了解底层实现细节。
  • STM32F429LVGL 7.11版本
    优质
    本项目详细介绍如何在STM32F429微控制器上成功移植轻量级GUI库LVGL 7.11版,适用于嵌入式系统开发人员。 支持4.3英寸、7英寸和10.1英寸屏幕,配备RGB转VGA模块。
  • 利用STM32CubeMX屏幕
    优质
    本教程详细介绍了如何使用STM32CubeMX工具进行开发环境配置,并成功地将正点原子LCD屏幕集成到基于STM32微控制器的项目中。 使用STM32CubeMX成功移植正点原子屏幕后,可以将该配置直接应用于其他工程中。
  • LVGL+NXP-GUI在STM32-F103ZET6上示例代码
    优质
    本项目提供了在正点原子STM32-F103ZET6开发板上将LVGL和NXP-GUI图形库进行移植的实例代码,旨在帮助开发者快速搭建基于这两个流行GUI框架的应用程序。 在正点原子STM32_F103ZET6平台上进行LVGL+NXP_guider的移植项目,并编写了一个简单的示例。该项目包含NXP_guider离线安装包以及stm32工程文件。
  • 精英板上FreeModbus V1.6模板.zip
    优质
    本资源包提供了在正点原子精英版开发板上针对FreeModbus协议栈V1.6版本的完整移植解决方案及代码示例,适用于从事嵌入式系统开发的技术人员。 正点原子精英板移植了FreeModbus V1.6并通过485转USB连接电脑进行测试。使用的软件是Modbus Poll,代码已经通过验证并可用。
  • 基于STM32F407开发板LittleVGL
    优质
    本项目致力于在正点原子STM32F407开发板上实现轻量级图形库LittleVGL的移植与优化,适用于嵌入式系统的GUI开发。 基于正点原子开发板STM32F407的LittleVGL移植可以实现官网demo以及多主题测试,使用的屏幕为电阻屏,分辨率为240×320,驱动为9341。