diff --git a/README.md b/README.md index 6bfe278..3002470 100644 --- a/README.md +++ b/README.md @@ -81,5 +81,5 @@ xSemaphoreGive(xSemaphoreHandler); ``` - 接收信号量:(接收句柄、等待时长) ```c -if (xSemaphoreTake(xSemLedOnHdlr, pdMS_TO_TICKS(10)) == pdTRUE); +if (xSemaphoreTake(xSemaphoreHandler, pdMS_TO_TICKS(10)) == pdTRUE); ``` \ No newline at end of file diff --git a/STM32/Environment_Node/Drivers/LoRa.c b/STM32/Environment_Node/Drivers/LoRa.c index 2194205..9b210ee 100644 --- a/STM32/Environment_Node/Drivers/LoRa.c +++ b/STM32/Environment_Node/Drivers/LoRa.c @@ -11,17 +11,17 @@ void vLoRaConnectionPkt(uint8_t ucNodeId) if (ucNodeId == xLoRaNode1Config.ucLoRaNode1Identifier) { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaNode1Config, 3); + vUsartSendArray(USART3, (uint8_t *)&xLoRaNode1Config, 3); } else if (ucNodeId == xLoRaNode2Config.ucLoRaNode2Identifier) { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaNode2Config, 3); + vUsartSendArray(USART3, (uint8_t *)&xLoRaNode2Config, 3); } else { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaGateConfig, 3); + vUsartSendArray(USART3, (uint8_t *)&xLoRaGateConfig, 3); } } @@ -36,11 +36,11 @@ void vLoRaToGateIdPkt(uint8_t ucNodeId) if (ucNodeId == xLoRaNode1Config.ucLoRaNode1Identifier) { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaNode1Config.ucLoRaNode1Identifier, 1); + vUsartSendArray(USART3, (uint8_t *)&xLoRaNode1Config.ucLoRaNode1Identifier, 1); } else if (ucNodeId == xLoRaNode2Config.ucLoRaNode2Identifier) { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaNode2Config.ucLoRaNode2Identifier, 1); + vUsartSendArray(USART3, (uint8_t *)&xLoRaNode2Config.ucLoRaNode2Identifier, 1); } } @@ -55,19 +55,19 @@ void vLoRaToGateSenIdPkt(uint8_t ucSensorId) if (ucSensorId == xLoRaSensorID.ucIdDht11) { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaSensorID.ucIdDht11, 1); + vUsartSendArray(USART3, (uint8_t *)&xLoRaSensorID.ucIdDht11, 1); } else if (ucSensorId == xLoRaSensorID.ucIdMq2) { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaSensorID.ucIdMq2, 1); + vUsartSendArray(USART3, (uint8_t *)&xLoRaSensorID.ucIdMq2, 1); } else if (ucSensorId == xLoRaSensorID.ucIdFire) { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaSensorID.ucIdFire, 1); + vUsartSendArray(USART3, (uint8_t *)&xLoRaSensorID.ucIdFire, 1); } else if (ucSensorId == xLoRaSensorID.ucIdLight) { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaSensorID.ucIdLight, 1); + vUsartSendArray(USART3, (uint8_t *)&xLoRaSensorID.ucIdLight, 1); } } @@ -82,23 +82,23 @@ void vLoRaToGateExeIdPkt(uint8_t ucExeId) if (ucExeId == xLoRaExecutorID.ucIdLed) { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaExecutorID.ucIdLed, 1); + vUsartSendArray(USART3, (uint8_t *)&xLoRaExecutorID.ucIdLed, 1); } else if (ucExeId == xLoRaExecutorID.ucIdFan) { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaExecutorID.ucIdFan, 1); + vUsartSendArray(USART3, (uint8_t *)&xLoRaExecutorID.ucIdFan, 1); } else if (ucExeId == xLoRaExecutorID.ucIdHumidifier) { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaExecutorID.ucIdHumidifier, 1); + vUsartSendArray(USART3, (uint8_t *)&xLoRaExecutorID.ucIdHumidifier, 1); } else if (ucExeId == xLoRaExecutorID.ucIdBuzzer) { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaExecutorID.ucIdBuzzer, 1); + vUsartSendArray(USART3, (uint8_t *)&xLoRaExecutorID.ucIdBuzzer, 1); } else if (ucExeId == xLoRaExecutorID.ucIdServo) { /* code */ - vUsart3SendArray((uint8_t *)&xLoRaExecutorID.ucIdServo, 1); + vUsartSendArray(USART3, (uint8_t *)&xLoRaExecutorID.ucIdServo, 1); } } diff --git a/STM32/Environment_Node/Drivers/LoRa.h b/STM32/Environment_Node/Drivers/LoRa.h index 9790f39..1b27f42 100644 --- a/STM32/Environment_Node/Drivers/LoRa.h +++ b/STM32/Environment_Node/Drivers/LoRa.h @@ -31,7 +31,7 @@ #define LORA_EXECUTOR_COMMAND_ON 0x01 #define LORA_EXECUTOR_COMMAND_OFF 0x00 -#include "USART3.h" +#include "USART.h" /* LoRaֲ */ diff --git a/STM32/Environment_Node/README.md b/STM32/Environment_Node/README.md deleted file mode 100644 index 2188e2f..0000000 --- a/STM32/Environment_Node/README.md +++ /dev/null @@ -1,72 +0,0 @@ -# - -## 项目实现逻辑: -**一、环境监测节点:** -- 1、创建任务:创建了led状态任务、温湿度检测任务和向网关节点传输数据三个任务。 -- 2、创建消息队列:温湿度检测任务将采集到的温湿度数据通过队列发送到传输数据任务,实现数据的保护。在中断服务函数中创建串口接收队列,同时新建一个所有执行器检测状态的任务,用于分析串口队列数据是否符合触发条件,若符合则触发二值信号量,反之则不触发。 -- 3、创建中断触发消息队列:在串口3创建消息队列,当串口3接收到消息触发中断后,将消息传送到消息队列,同时创建一个任务用于接收消息队列。 -## 本系统在FreeRTOS中引用的api: -**一、多任务创建与运行:** -- 1、概念:通过定义任务句柄、名称、优先级,从而实现多任务同时在单核的单片机中以并发或抢占的形式运行。在FreeRTOS中,时钟源频率通常被设定为1kHz(#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )),时间片1tick也就是1ms。在任务优先级相同的情况下,多个任务按照一个时间片切换运行,也就是轮询式调度;当其中一个任务的优先级较高时(数值较高),该任务会打断其他任务的运行,也就是抢占式调度。在创建任务后,会产生任务控制块,简称TCB,TCB在切换任务的时候,会将创建任务的指针保存到创建的栈里,也就是保存任务现场,直到任务切换过来后再复原现场。FreeRTOS的任务分为4个状态,分别为就绪态、运行态、挂起态和阻塞态,当其中一个任务遇到延时等情况,会进入到阻塞态,会执行其他任务知道延时结束,低优先级任务被高优先级任务打断也同理。 -- 2、使用到的api函数: -任务函数: -```c -void vTask(void *<参数>); -``` -创建任务函数: -```c -TaskHandle_t xTaskHandler; -xTaskCreate( - (TaskFunction_t ) vTask, - (char * ) "<定义一个任务名称>", - (configSTACK_DEPTH_TYPE) 1024, - (void * ) NULL, (若有参数则写参数名称) - (UBaseType_t ) <优先级,数字越大优先级越高> - (TaskHandle_t * ) &xTaskHandler); -``` -启动任务调度函数: -```c -vTaskStartScheduler(); -``` -**二、消息队列:** -- 1、概念:在初始化消息队列函数种,有两个参数,第一个是队列的长度,也就是这个队列能存放多少个数据;第二个参数就是每个数据的大小,单位为字节,在stm32中uint8_t指针的长度一般是4字节。在多个任务需要共用一个变量值以传递数据的时候,使用消息队列可以很好地保护数据的传输不会被其他用到相关变量的任务干扰。消息队列通过发送队列和接收队列的函数,将不同的任务搭建起一个传递参数的桥梁,从而确保传递数据时不被其他任务干扰,造成数据的误差。如DHT11接收到温湿度数据,将温湿度数据传输到LoRa发送数据的任务中。 -- 2、使用到的api函数: -创建队列句柄: -```c -QueueHandle_t xQueueHandler; -``` -创建队列: -```c -xQueueHandler = xQueueCreate( - (UBaseType_t) <队列的长度,单位字节>, - (UBaseType_t) <每个数据的大小>); -``` -发送队列,也就是将数据存入队列,等待接收,接收时长从0到portMAX_DELAY,如下所示。 -```c -xQueueSend(xQueueHandler, <要传递的变量,指向其地址>, pdMS_TO_TICKS(10)); -``` -在中断中发送队列(在串口初始化中设置中断抢占优先级配置拉满,且需要设置上下文转换以免造成阻塞): -```c -BaseType_t xHigherPriorityTaskWoken = pdFALSE; -xQueueSendFromISR(xQueueUsart3IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken); -portYIELD_FROM_ISR(xHigherPriorityTaskWoken); -``` -接收队列,可接收普通和中断的队列: -```c -xQueueReceive(xQueueHandler, <要传递的变量,指向其地址>, portMAX_DELAY); -``` -**三、信号量:** -- 1、概念:信号量一般用于任务管理。常用的分为二值信号量、计数型信号量和互斥信号量3种信号量,其中二值信号量全称为二进制信号量,用于任务同步,类似于状态机,而后两者分别用于多资源和单资源的管理,资源管理就相当于停车场,多资源管理相当于停车场的多个车位,若停车位停满车就不能停车了,单资源同理。这三种信号量都只有0或1两种值。使用信号量的过程,以二值信号量为例,为创建二值信号量->释放二值信号量->获取二值信号量。释放二值信号量共有两个函数,释放任务中信号量和释放中断中信号量。信号量和状态机类似,释放信号量就相当于改变标志位,而获取信号量相当于获取改变的标志位以决定是否改变执行器的状态。由于只有0和1两种值,因此适用于只有开和关两种状态的执行器。 -- 2、使用到的api函数: -动态创建二值信号量: -```c -SemaphoreHandle_t xSemaphoreHandler; -``` -发送信号量: -```c -xSemaphoreGive(xSemaphoreHandler); -``` -接收信号量:(接收句柄、等待时长) -```c -if (xSemaphoreTake(xSemLedOnHdlr, pdMS_TO_TICKS(10)) == pdTRUE); -``` \ No newline at end of file diff --git a/STM32/Environment_Node/STM32Template.uvguix.Exploration b/STM32/Environment_Node/STM32Template.uvguix.Exploration index 9cd90e0..35bc697 100644 --- a/STM32/Environment_Node/STM32Template.uvguix.Exploration +++ b/STM32/Environment_Node/STM32Template.uvguix.Exploration @@ -6,7 +6,7 @@
### uVision Project, (C) Keil Software
- E:\Data\Project\IoTProjects\FreeRTOS_LoRa_Environment_Assistant\STM32\Environment_Node\Drivers + E:\Data\Project\IoTProjects\FreeRTOS_LoRa_Environment_Assistant\STM32\Environment_Node\System @@ -93,8 +93,8 @@ 2 3 - -32000 - -32000 + -1 + -1 -1 @@ -110,8 +110,8 @@ 0 - 1215 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000008000000000000000100000062453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C557365725C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF66453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C53797374656D5C5553415254332E6800000000085553415254332E6800000000FFDC7800FFFFFFFF66453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C53797374656D5C5553415254332E6300000000085553415254332E6300000000BECEA100FFFFFFFF65453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C447269766572735C4C6F52612E6800000000064C6F52612E6800000000F0A0A100FFFFFFFF65453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C447269766572735C4C6F52612E6300000000064C6F52612E6300000000BCA8E100FFFFFFFF79453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C53797374656D46696C65735C737461727475705F73746D3332663130785F6D642E730000000016737461727475705F73746D3332663130785F6D642E73000000009CC1B600FFFFFFFF66453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C447269766572735C52656C61792E63000000000752656C61792E6300000000F7B88600FFFFFFFF66453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C447269766572735C52656C61792E68000000000752656C61792E6800000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F4000000660000008007000030030000 + 1211 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000008000000000000000100000062453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C557365725C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF65453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C447269766572735C4C6F52612E6800000000064C6F52612E6800000000F0A0A100FFFFFFFF65453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C447269766572735C4C6F52612E6300000000064C6F52612E6300000000BCA8E100FFFFFFFF79453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C53797374656D46696C65735C737461727475705F73746D3332663130785F6D642E730000000016737461727475705F73746D3332663130785F6D642E73000000009CC1B600FFFFFFFF66453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C447269766572735C52656C61792E63000000000752656C61792E6300000000F7B88600FFFFFFFF66453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C447269766572735C52656C61792E68000000000752656C61792E6800000000D9ADC200FFFFFFFF65453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C53797374656D5C55534152542E63000000000755534152542E6300000000F7B88600FFFFFFFF65453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C456E7669726F6E6D656E745F4E6F64655C53797374656D5C55534152542E68000000000755534152542E6800000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F4000000660000008007000030030000 @@ -134,7 +134,7 @@ 16 - 4A010000A9000000E605000037010000 + F40000006600000090050000F4000000 @@ -1799,14 +1799,14 @@ 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DD00000090050000E1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000004A010000A9000000E605000037010000F40000004F00000090050000DD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000F6040000A9000000E60500007F020000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F400000019030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000056000000A90000004601000073030000000000004F000000F0000000190300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000011020000900500001502000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000560000006F020000E605000011030000000000001502000090050000B702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000015020000CC020000B702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000019030000800700001D030000010000000100001004000000010000009AFDFFFF26010000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000005600000077030000D607000040040000000000001D03000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DD00000090050000E1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F40000006600000090050000F4000000F40000004F00000090050000DD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A004000066000000900500003C020000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F400000019030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F000000030030000000000004F000000F0000000190300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000011020000900500001502000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000002C02000090050000CE020000000000001502000090050000B702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000015020000CC020000B702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000019030000800700001D030000010000000100001004000000010000009AFDFFFF26010000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000003403000080070000FD030000000000001D03000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File 2578 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000012785175657565557361727433526548646C729600000000000000010012785175657565557361727433526548646C7200000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000012785175657565557361727433526548646C729600000000000000010012785175657565557361727433526548646C7200000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1822,7 +1822,7 @@ Build 976 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000002001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -1838,7 +1838,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3606,36 +3606,18 @@ 0 .\User\main.c - 13 - 112 + 4 + 181 203 1 0 - - .\System\USART3.h - 0 - 1 - 17 - 1 - - 0 - - - .\System\USART3.c - 24 - 1 - 106 - 1 - - 0 - .\Drivers\LoRa.h - 6 - 3 - 4 + 15 + 1 + 34 1 0 @@ -3676,6 +3658,24 @@ 0 + + .\System\USART.c + 0 + 1 + 1 + 1 + + 0 + + + .\System\USART.h + 45 + 1 + 32 + 1 + + 0 + diff --git a/STM32/Environment_Node/STM32Template.uvoptx b/STM32/Environment_Node/STM32Template.uvoptx index ad5da46..4a53d63 100644 --- a/STM32/Environment_Node/STM32Template.uvoptx +++ b/STM32/Environment_Node/STM32Template.uvoptx @@ -947,30 +947,6 @@ 0 0 0 - .\System\USART3.c - USART3.c - 0 - 0 - - - 4 - 58 - 5 - 0 - 0 - 0 - .\System\USART3.h - USART3.h - 0 - 0 - - - 4 - 59 - 1 - 0 - 0 - 0 .\System\Delay.c Delay.c 0 @@ -978,7 +954,7 @@ 4 - 60 + 58 5 0 0 @@ -990,7 +966,7 @@ 4 - 61 + 59 1 0 0 @@ -1002,7 +978,7 @@ 4 - 62 + 60 5 0 0 @@ -1012,6 +988,30 @@ 0 0 + + 4 + 61 + 1 + 0 + 0 + 0 + .\System\USART.c + USART.c + 0 + 0 + + + 4 + 62 + 5 + 0 + 0 + 0 + .\System\USART.h + USART.h + 0 + 0 + diff --git a/STM32/Environment_Node/STM32Template.uvprojx b/STM32/Environment_Node/STM32Template.uvprojx index 9b3db01..09b744b 100644 --- a/STM32/Environment_Node/STM32Template.uvprojx +++ b/STM32/Environment_Node/STM32Template.uvprojx @@ -680,16 +680,6 @@ System - - USART3.c - 1 - .\System\USART3.c - - - USART3.h - 5 - .\System\USART3.h - Delay.c 1 @@ -710,6 +700,16 @@ 5 .\System\CRC32.h + + USART.c + 1 + .\System\USART.c + + + USART.h + 5 + .\System\USART.h + diff --git a/STM32/Environment_Node/System/USART.c b/STM32/Environment_Node/System/USART.c new file mode 100644 index 0000000..dd676a7 --- /dev/null +++ b/STM32/Environment_Node/System/USART.c @@ -0,0 +1,281 @@ +#include "USART.h" + +/** + * @brief 1ijʼ + * @note ʹUSART1ڣPA9->USART1_RXPA10->USART1_TXΪ115200 + * @param *xUsartId ѡ񴮿ں + * @param ulBaudrate ҪõIJ + * @retval None + */ +void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate) +{ + if (xUsartId == USART1) + { + /* code */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); + + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Pin = USART1_GPIO_PIN_TX; + GPIO_Init(GPIOA, &GPIO_InitStructure); + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Pin = USART1_GPIO_PIN_RX; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + USART_InitTypeDef USART_InitStructure; + USART_InitStructure.USART_BaudRate = ulBaudrate; // 趨USART_InitڲԶ9600ӦķƵϵдBRRĴ + RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ,ʹ + USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // ģʽʹģʽûţģʽͽģʽ + USART_InitStructure.USART_Parity = USART_Parity_No; // Уλ + USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ + USART_InitStructure.USART_WordLength = USART_WordLength_8b; // ֳҪУ飬ֳѡ8λ + USART_Init(USART1,&USART_InitStructure); + // ǴڵIJѯģʽʹжϣҪжϣNVIC + USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); // ѡRXNEж,RXNE־λNVICRXNE־λ1ͻNVICжϣ֮жϺн + + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // 飬4Ϊ4bitռȼ0bitӦȼռȼΪ0-15FreeRTOSûӦȼȼ4൱4λռȼ0λӦȼ + NVIC_InitTypeDef NVIC_InitStructure; // ʼNVICUSART1ͨ + NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; // жͨ + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5; // ռȼãFreeRTOSãڷΧڿԵFreeRTOSԡFromISR()βapi + // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // Ӧȼãò + NVIC_Init(&NVIC_InitStructure); // ָNVIC_InitStructureĵַ + + USART_Cmd(USART1,ENABLE); + } else if (xUsartId == USART2) + { + /* code */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Pin = USART2_GPIO_PIN_TX; + GPIO_Init(GPIOB, &GPIO_InitStructure); + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; + GPIO_InitStructure.GPIO_Pin = USART2_GPIO_PIN_RX; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + USART_InitTypeDef USART_InitStructure; + USART_InitStructure.USART_BaudRate = ulBaudrate; // 趨USART_InitڲԶ9600ӦķƵϵдBRRĴ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ,ʹ + USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // ģʽʹģʽûţģʽͽģʽ + USART_InitStructure.USART_Parity = USART_Parity_No; // Уλ + USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ + USART_InitStructure.USART_WordLength = USART_WordLength_8b; // ֳҪУ飬ֳѡ8λ + USART_Init(USART2,&USART_InitStructure); + // ǴڵIJѯģʽʹжϣҪжϣNVIC + USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); // ѡRXNEж,RXNE־λNVICRXNE־λ1ͻNVICжϣ֮жϺн + + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // 飬4Ϊ4bitռȼ0bitӦȼռȼΪ0-15FreeRTOSûӦȼȼ4൱4λռȼ0λӦȼ + NVIC_InitTypeDef NVIC_InitStructure; // ʼNVICUSART1ͨ + NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; // жͨ + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5; // ռȼãFreeRTOSãڷΧڿԵFreeRTOSԡFromISR()βapi + // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // Ӧȼãò + NVIC_Init(&NVIC_InitStructure); // ָNVIC_InitStructureĵַ + + USART_Cmd(USART2, ENABLE); + } else if (xUsartId == USART3) + { + /* code */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); + + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_TX; + GPIO_Init(GPIOB, &GPIO_InitStructure); + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; + GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_RX; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + USART_InitTypeDef USART_InitStructure; + USART_InitStructure.USART_BaudRate = ulBaudrate; // 趨USART_InitڲԶ9600ӦķƵϵдBRRĴ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ,ʹ + USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // ģʽʹģʽûţģʽͽģʽ + USART_InitStructure.USART_Parity = USART_Parity_No; // Уλ + USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ + USART_InitStructure.USART_WordLength = USART_WordLength_8b; // ֳҪУ飬ֳѡ8λ + USART_Init(USART3,&USART_InitStructure); + // ǴڵIJѯģʽʹжϣҪжϣNVIC + USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); // ѡRXNEж,RXNE־λNVICRXNE־λ1ͻNVICжϣ֮жϺн + + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // 飬4Ϊ4bitռȼ0bitӦȼռȼΪ0-15FreeRTOSûӦȼȼ4൱4λռȼ0λӦȼ + NVIC_InitTypeDef NVIC_InitStructure; // ʼNVICUSART1ͨ + NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; // жͨ + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5; // ռȼãFreeRTOSãڷΧڿԵFreeRTOSԡFromISR()βapi + // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // Ӧȼãò + NVIC_Init(&NVIC_InitStructure); // ָNVIC_InitStructureĵַ + + USART_Cmd(USART3, ENABLE); + } +} + +/** + * @brief ڷ͵ֽں + * @note ͿԴTXŷһֽݡ + * @param *xUsartId ѡ񴮿ں + * @param ucByte Ҫ͵ֽ + * @retval None + */ +void vUsartSendByte(USART_TypeDef *xUsartId, uint8_t ucByte) +{ + USART_SendData(xUsartId, ucByte); // ByteдTDRĴ + // д֮Ҫȴһ£TDRתƵλĴͿˣݻTDRĴУдݾͻݸǣڷ֮Ҫȴһ±־λ + while(USART_GetFlagStatus(xUsartId, USART_FLAG_TXE) == RESET); // ݼĴձ־λȴTXE1Ҫһwhileѭ TXE:ݼĴգ־λԶ0ֶλ +} + +/** + * @brief ڷ麯 + * @note һ16ģʽ¡uint8_tָָͣ׵ַ,޷жǷҪٴһLength + * @param *xUsartId ѡ񴮿ں + * @param *pucArray Ҫ͵ʮ + * @param usLength ͳ + * @retval None + */ +void vUsartSendArray(USART_TypeDef *xUsartId, uint8_t *pucArray, uint16_t usLength) +{ + for(uint16_t i = 0; i < usLength; i ++) // forѭִLengthΣԶArrayݽбʵʶ鲻Ҫuint16_tķΧ + { + vUsartSendByte(xUsartId, pucArray[i]); // ȡArrayÿһ + } +} + +/** + * @brief ڷַ + * @note ַװָʽ鳤ֱ⵽ַĩβַݳȲɴַ͡ + * @param *xUsartId ѡ񴮿ں + * @param *pcString Ҫ͵ + * @retval None + */ +void vUsartSendString(USART_TypeDef *xUsartId, char *pcString) // uint8_t *ҲԣַԴһ־λԾͲҪٴݳȲ +{ + for(uint8_t i = 0; pcString[i] != '\0'; i++) // ѭͿñ־λж,'\0'ǿַתַʾʽֱд0һ + { + vUsartSendByte(xUsartId, pcString[i]); // StringַһȡͨSendByte + } +} + +/** + * @brief ڴӡ + * @note ַװָʽ鳤ֱ⵽ַĩβַݳȲɴַ͡ + * @param *xUsartId ѡ񴮿ں + * @param *format ַ + * @param ... ɱб + * @retval None + */ +void vUsartPrintf(USART_TypeDef *xUsartId, char *format, ...) +{ + char cBuffer[100]; + va_list arg; // argǶһб + va_start(arg, format); // formatλÿʼղarg + vsprintf(cBuffer, format, arg); // װʽҪvsprintfΪsprintfֱֻܽдIJӡַʽformatarg + va_end(arg); // ͷŲ + char *p = cBuffer; + if (xUsartId == USART1) + { + /* code */ + while (*p) + { + /* code */ + while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // ȴͻΪ + USART_SendData(USART1, *p++); + } + } else if (xUsartId == USART2) + { + /* code */ + while (*p) + { + /* code */ + while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); + USART_SendData(USART2, *p++); + } + } else if (xUsartId == USART3) + { + /* code */ + while (*p) + { + /* code */ + while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET); + USART_SendData(USART3, *p++); + } + } +} + +/** + * @brief 1жϴ + * @note մжϷ͵ÿ֡ݵϢУԱݡ + * @param None + * @retval None + */ +void USART1_IRQHandler(void) +{ + if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET) + { + /* code */ + uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART1); + #if (USE_NONE_SYSTEM == 1) + #elif (USE_FREERTOS == 1) + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + xQueueSendFromISR(xQueueUsart1IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken); + /* Դл */ + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + #elif (USE_OSAL == 1) + #endif + USART_ClearITPendingBit(USART1, USART_IT_RXNE); + } +} + +/** + * @brief 2жϴ + * @note մжϷ͵ÿ֡ݵϢУԱݡ + * @param None + * @retval None + */ +void USART2_IRQHandler(void) +{ + if (USART_GetITStatus(USART2, USART_IT_RXNE) == SET) + { + /* code */ + uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART2); + #if (USE_NONE_SYSTEM == 1) + #elif (USE_FREERTOS == 1) + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + xQueueSendFromISR(xQueueUsart2IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken); + /* Դл */ + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + #elif (USE_OSAL == 1) + #endif + USART_ClearITPendingBit(USART2, USART_IT_RXNE); + } +} + +/** + * @brief 3жϴ + * @note մжϷ͵ÿ֡ݵϢУԱݡ + * @param None + * @retval None + */ +void USART3_IRQHandler(void) +{ + if (USART_GetITStatus(USART3, USART_IT_RXNE) == SET) + { + /* code */ + uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART3); + #if (USE_NONE_SYSTEM == 1) + #elif (USE_FREERTOS == 1) + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + xQueueSendFromISR(xQueueUsart3IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken); + /* Դл */ + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + #elif (USE_OSAL == 1) + #endif + USART_ClearITPendingBit(USART3, USART_IT_RXNE); + } +} diff --git a/STM32/Environment_Node/System/USART.h b/STM32/Environment_Node/System/USART.h new file mode 100644 index 0000000..b1cdbbb --- /dev/null +++ b/STM32/Environment_Node/System/USART.h @@ -0,0 +1,43 @@ +#ifndef __USART_H__ +#define __USART_H__ + +#define USE_NONE_SYSTEM 0 +#define USE_FREERTOS 1 +#define USE_OSAL 0 +#define vUsart1IrqHandler USART1_IRQHandler +#define vEsp8266IrqHandler USART2_IRQHandler +#define vLoRaIrqHandler USART3_IRQHandler +#define USART1_GPIO_PIN_TX GPIO_Pin_9 +#define USART1_GPIO_PIN_RX GPIO_Pin_10 +#define USART2_GPIO_PIN_TX GPIO_Pin_2 +#define USART2_GPIO_PIN_RX GPIO_Pin_3 +#define USART3_GPIO_PIN_TX GPIO_Pin_10 +#define USART3_GPIO_PIN_RX GPIO_Pin_11 + +#if (USE_NONE_SYSTEM == 1) +#elif (USE_FREERTOS == 1) + #include "FreeRTOS.h" + #include "queue.h" +#elif (USE_OSAL == 1) +#endif + +#include "stm32f10x.h" // Device header +#include +#include +#include + +#if (USE_NONE_SYSTEM == 1) +#elif (USE_FREERTOS == 1) + extern QueueHandle_t xQueueUsart1IrqHdlr; + extern QueueHandle_t xQueueUsart2IrqHdlr; + extern QueueHandle_t xQueueUsart3IrqHdlr; +#elif (USE_OSAL == 1) +#endif + +void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate); +void vUsartSendByte(USART_TypeDef *xUsartId, uint8_t ucByte); +void vUsartSendArray(USART_TypeDef *xUsartId, uint8_t *pucArray, uint16_t usLength); +void vUsartSendString(USART_TypeDef *xUsartId, char *pcString); +void vUsartPrintf(USART_TypeDef *xUsartId, char *format, ...); + +#endif diff --git a/STM32/Environment_Node/System/USART3.c b/STM32/Environment_Node/System/USART3.c deleted file mode 100644 index 74c08e9..0000000 --- a/STM32/Environment_Node/System/USART3.c +++ /dev/null @@ -1,142 +0,0 @@ -#include "USART3.h" - -/** - * @brief LoRaijʼ - * @note ʹUSART3ڣPB10->LoRa_RXPB11->LoRa_TXΪ115200 - * @param ulUsart3Baudrate - * @retval None - */ -void vUsart3Init(uint32_t ulUsart3Baudrate) -{ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_TX; - GPIO_Init(GPIOB, &GPIO_InitStructure); - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_RX; - GPIO_Init(GPIOB, &GPIO_InitStructure); - - USART_InitTypeDef USART_InitStructure; - USART_InitStructure.USART_BaudRate = ulUsart3Baudrate; // 趨USART_InitڲԶ9600ӦķƵϵдBRRĴ - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); - USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ,ʹ - USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // ģʽʹģʽûţģʽͽģʽ - USART_InitStructure.USART_Parity = USART_Parity_No; // Уλ - USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ - USART_InitStructure.USART_WordLength = USART_WordLength_8b; // ֳҪУ飬ֳѡ8λ - USART_Init(USART3,&USART_InitStructure); - // ǴڵIJѯģʽʹжϣҪжϣNVIC - USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); // ѡRXNEж,RXNE־λNVICRXNE־λ1ͻNVICжϣ֮жϺн - - NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // 飬4Ϊ4bitռȼ0bitӦȼռȼΪ0-15FreeRTOSûӦȼȼ4൱4λռȼ0λӦȼ - NVIC_InitTypeDef NVIC_InitStructure; // ʼNVICUSART1ͨ - NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; // жͨ - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5; // ռȼãFreeRTOSãڷΧڿԵFreeRTOSԡFromISR()βapi - // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // Ӧȼãò - NVIC_Init(&NVIC_InitStructure); // ָNVIC_InitStructureĵַ - - USART_Cmd(USART3,ENABLE); - - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_ATK_MD0; - GPIO_Init(GPIOB, &GPIO_InitStructure); - - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_ATK_AUX; - GPIO_Init(GPIOB, &GPIO_InitStructure); -} - -/** - * @brief ڷ͵ֽں - * @note ͿԴTXŷһֽݡ - * @param ucByte - * @retval None - */ -void vUsart3SendByte(uint8_t ucByte) -{ - USART_SendData(USART3, ucByte); // ByteдTDRĴ - // д֮Ҫȴһ£TDRתƵλĴͿˣݻTDRĴУдݾͻݸǣڷ֮Ҫȴһ±־λ - while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET); // ݼĴձ־λȴTXE1Ҫһwhileѭ TXE:ݼĴգ־λԶ0ֶλ -} - -/** - * @brief ڷ麯 - * @note һ16ģʽ¡ - * @note uint8_tָָͣ׵ַ,޷жǷҪٴһLength - * @param *pucArrayusLength - * @retval None - */ -void vUsart3SendArray(uint8_t *pucArray, uint16_t usLength) -{ - for(uint16_t i = 0; i < usLength; i ++) // forѭִLengthΣԶArrayݽбʵʶ鲻Ҫuint16_tķΧ - { - vUsart3SendByte(pucArray[i]); // ȡArrayÿһ - } -} - -/** - * @brief ڷַ - * @note ַװָʽ鳤ֱ⵽ַĩβַݳȲɴַ͡ - * @param *pcString - * @retval None - */ -void vUsart3SendString(char *pcString) // uint8_t *ҲԣַԴһ־λԾͲҪٴݳȲ -{ - for(uint8_t i = 0; pcString[i] != '\0'; i++) // ѭͿñ־λж,'\0'ǿַתַʾʽֱд0һ - { - vUsart3SendByte(pcString[i]); // StringַһȡͨSendByte - } -} - -/** - * @brief printfض - * @note fputcprintfĵײ㣬printfڴӡʱ򣬾Dzϵfputcӡ - * @param ch,*f - * @retval ch - */ -int fputc(int ch, FILE *f) -{ - vUsart3SendByte(ch); - return ch; -} - -/** - * @brief printfװ - * @note һǽַڶǽտɱб - * @param *format,... - * @retval None - */ -void vUsart3Printf(char *format, ...) -{ - char String[100]; - va_list arg; // argǶһб - va_start(arg, format); // formatλÿʼղarg - vsprintf(String, format, arg); // װʽҪvsprintfΪsprintfֱֻܽдIJӡַʽformatarg - va_end(arg); // ͷŲ - vUsart3SendString(String); -} - -void USART3_IRQHandler(void) -{ - if (USART_GetITStatus(USART3, USART_IT_RXNE) == SET) - { - /* code */ - uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART3); - #if (USE_NONE_SYSTEM == 1) - #elif (USE_FREERTOS == 1) - BaseType_t xHigherPriorityTaskWoken = pdFALSE; - xQueueSendFromISR(xQueueUsart3IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken); - /* Դл */ - portYIELD_FROM_ISR(xHigherPriorityTaskWoken); - #elif (USE_OSAL == 1) - #endif - USART_ClearITPendingBit(USART3, USART_IT_RXNE); - } -} diff --git a/STM32/Environment_Node/System/USART3.h b/STM32/Environment_Node/System/USART3.h deleted file mode 100644 index 850ab56..0000000 --- a/STM32/Environment_Node/System/USART3.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __USART3_H__ -#define __USART3_H__ - -#define USE_NONE_SYSTEM 0 -#define USE_FREERTOS 1 -#define USE_OSAL 0 -#define vLoRaIrqHandler USART3_IRQHandler -#define USART3_GPIO_PIN_TX GPIO_Pin_10 -#define USART3_GPIO_PIN_RX GPIO_Pin_11 -#define USART3_GPIO_PIN_ATK_AUX GPIO_Pin_4 // PA4 -#define USART3_GPIO_PIN_ATK_MD0 GPIO_Pin_3 // PB3 - -#if (USE_NONE_SYSTEM == 1) -#elif (USE_FREERTOS == 1) - #include "FreeRTOS.h" - #include "queue.h" -#elif (USE_OSAL == 1) -#endif - -#include "stm32f10x.h" // Device header -#include -#include -#include - -#if (USE_NONE_SYSTEM == 1) -#elif (USE_FREERTOS == 1) - extern QueueHandle_t xQueueUsart3IrqHdlr; -#elif (USE_OSAL == 1) -#endif - -void vUsart3Init(uint32_t ulUsart3Baudrate); -void vUsart3SendByte(uint8_t ucByte); -void vUsart3SendArray(uint8_t *pucArray, uint16_t usLength); -void vUsart3SendString(char *pcString); -void vUsart3Printf(char *format, ...); - -#endif diff --git a/STM32/Environment_Node/User/main.c b/STM32/Environment_Node/User/main.c index 65b86be..4e98c9b 100644 --- a/STM32/Environment_Node/User/main.c +++ b/STM32/Environment_Node/User/main.c @@ -5,7 +5,8 @@ #include "semphr.h" #include "LED.h" #include "DHT11.h" -#include "USART3.h" +// #include "USART3.h" +#include "USART.h" #include "LoRa.h" #include "Relay.h" @@ -20,6 +21,8 @@ TaskHandle_t xTaskLoRaMsgRecHdlr; /* о */ QueueHandle_t xQueueTempHdlr; QueueHandle_t xQueueHumiHdlr; +QueueHandle_t xQueueUsart1IrqHdlr; +QueueHandle_t xQueueUsart2IrqHdlr; QueueHandle_t xQueueUsart3IrqHdlr; /* ֵź */ @@ -125,19 +128,19 @@ void vTaskLoRaToGatePkt(void *pvParameters) if (xRetvalQueueTemp == pdTRUE && xRetvalQueueHumi == pdTRUE) { /* code */ - vUsart3SendArray(&ucRecTempData, 1); - vUsart3SendArray(&ucRecHumiData, 1); + vUsartSendArray(USART3, &ucRecTempData, 1); + vUsartSendArray(USART3, &ucRecHumiData, 1); } if (xSemaphoreTake(xSemLedOnHdlr, pdMS_TO_TICKS(10)) == pdTRUE) { /* code */ - vUsart3SendArray(&xLoRaExecutorID.ucIdLed, 1); - vUsart3SendArray(&xLoRaExecutorCommand.ucCommandOn, 1); + vUsartSendArray(USART3, &xLoRaExecutorID.ucIdLed, 1); + vUsartSendArray(USART3, &xLoRaExecutorCommand.ucCommandOn, 1); } else if (xSemaphoreTake(xSemLedOffHdlr, pdMS_TO_TICKS(10)) == pdTRUE) { /* code */ - vUsart3SendArray(&xLoRaExecutorID.ucIdLed, 1); - vUsart3SendArray(&xLoRaExecutorCommand.ucCommandOff, 1); + vUsartSendArray(USART3, &xLoRaExecutorID.ucIdLed, 1); + vUsartSendArray(USART3, &xLoRaExecutorCommand.ucCommandOff, 1); } vTaskDelay(500); } @@ -180,7 +183,7 @@ void vTaskLoRaMsgRec(void *pvParameters) void vCreateTasksList(void) { // #if defined __LED_H__ - // #if LED_PC13_WORK_MODE == LED_PC13_STM32_STATE_MODE + #if LED_PC13_WORK_MODE == LED_PC13_STM32_STATE_MODE /* 񣬲ֱΪơ֡ջСزֵȼ */ xTaskCreate( (TaskFunction_t ) vTaskStateLed, @@ -189,7 +192,7 @@ void vCreateTasksList(void) (void * ) NULL, (UBaseType_t ) 2, (TaskHandle_t * ) &xTaskStateLedHdlr); - // #else + #else xTaskCreate( (TaskFunction_t ) vTaskLedControl, (char * ) "TaskName_LedControl", @@ -197,7 +200,7 @@ void vCreateTasksList(void) (void * ) NULL, (UBaseType_t ) 2, (TaskHandle_t * ) &xTaskLedCtrlHdlr); - // #endif + #endif // #endif // #if defined __RELAY_H__ xTaskCreate( @@ -252,7 +255,7 @@ void vCreateQueuesList(void) if (xQueueTempHdlr == NULL || xQueueHumiHdlr == NULL || xQueueUsart3IrqHdlr == NULL) { /* code */ - vUsart3Printf("Queue Init Failed.\r\n"); + vUsartPrintf(USART3, "Queue Init Failed.\r\n"); } } @@ -269,7 +272,7 @@ int main(void) vFanRelayInit(); vDelayInit(); vPc13LedInit(); - vUsart3Init(115200); + vUsartInit(USART3, 115200); vCreateQueuesList(); vCreateSemaphoresList(); vCreateTasksList(); diff --git a/STM32/Gateway_Node/STM32Template.uvguix.Exploration b/STM32/Gateway_Node/STM32Template.uvguix.Exploration index 3ceaee9..6f4b28f 100644 --- a/STM32/Gateway_Node/STM32Template.uvguix.Exploration +++ b/STM32/Gateway_Node/STM32Template.uvguix.Exploration @@ -28,17 +28,17 @@ 38003 Registers - 140 90 + 140 82 346 Code Coverage - 1010 656 + 1010 160 204 Performance Analyzer - 1170 175 175 496 + 1170 @@ -124,7 +124,7 @@ 0 1596 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000B00000000000000010000005E453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C557365725C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF73453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C4672656552544F535C636F6E6669675C4672656552544F53436F6E6669672E6800000000104672656552544F53436F6E6669672E6800000000BECEA100FFFFFFFF78453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C4672656552544F535C706F727461626C655C525644535C41524D5F434D335C706F72742E630000000006706F72742E6300000000BCA8E100FFFFFFFF66453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C4672656552544F535C696E635C7461736B2E6800000000067461736B2E68000000009CC1B600FFFFFFFF61453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C447269766572735C4C6F52612E6300000000064C6F52612E6300000000F7B88600FFFFFFFF61453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C53797374656D5C44656C61792E63000000000744656C61792E6300000000D9ADC200FFFFFFFF61453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C53797374656D5C44656C61792E68000000000744656C61792E6800000000A5C2D700FFFFFFFF61453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C53797374656D5C55534152542E63000000000755534152542E6300000000B3A6BE00FFFFFFFF61453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C447269766572735C4C6F52612E6800000000064C6F52612E6800000000EAD6A300FFFFFFFF61453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C53797374656D5C55534152542E68000000000755534152542E6800000000F6FA7D00FFFFFFFF75453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C53797374656D46696C65735C737461727475705F73746D3332663130785F6D642E730000000016737461727475705F73746D3332663130785F6D642E7300000000F6FA7D00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000EC000000660000008007000030030000 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000B00000000000000010000005E453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C557365725C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF73453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C4672656552544F535C636F6E6669675C4672656552544F53436F6E6669672E6800000000104672656552544F53436F6E6669672E6800000000FFDC7800FFFFFFFF78453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C4672656552544F535C706F727461626C655C525644535C41524D5F434D335C706F72742E630000000006706F72742E6300000000BECEA100FFFFFFFF66453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C4672656552544F535C696E635C7461736B2E6800000000067461736B2E6800000000F0A0A100FFFFFFFF61453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C447269766572735C4C6F52612E6300000000064C6F52612E6300000000BCA8E100FFFFFFFF61453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C53797374656D5C44656C61792E63000000000744656C61792E63000000009CC1B600FFFFFFFF61453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C53797374656D5C44656C61792E68000000000744656C61792E6800000000F7B88600FFFFFFFF61453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C53797374656D5C55534152542E63000000000755534152542E6300000000D9ADC200FFFFFFFF61453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C447269766572735C4C6F52612E6800000000064C6F52612E6800000000A5C2D700FFFFFFFF61453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C53797374656D5C55534152542E68000000000755534152542E6800000000B3A6BE00FFFFFFFF75453A5C446174615C50726F6A6563745C496F5450726F6A656374735C4672656552544F535F4C6F52615F456E7669726F6E6D656E745F417373697374616E745C53544D33325C476174657761795F4E6F64655C53797374656D46696C65735C737461727475705F73746D3332663130785F6D642E730000000016737461727475705F73746D3332663130785F6D642E7300000000EAD6A300FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000EC000000660000008007000030030000 @@ -1819,7 +1819,7 @@ File 2578 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000012785175657565557361727433526548646C729600000000000000010012785175657565557361727433526548646C7200000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000012785175657565557361727433526548646C729600000000000000010012785175657565557361727433526548646C7200000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1835,7 +1835,7 @@ Build 976 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000002001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -1851,7 +1851,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3619,9 +3619,9 @@ 0 .\User\main.c - 19 + 62 28 - 45 + 46 1 0 @@ -3638,7 +3638,7 @@ .\FreeRTOS\portable\RVDS\ARM_CM3\port.c 28 - 259 + 176 177 1 diff --git a/STM32/Gateway_Node/System/USART2.c b/STM32/Gateway_Node/System/USART2.c deleted file mode 100644 index c10a6d3..0000000 --- a/STM32/Gateway_Node/System/USART2.c +++ /dev/null @@ -1,132 +0,0 @@ -#include "USART2.h" - -/** - * @brief 2ijʼ - * @note ʹUSART2ڣPB10->LoRa_RXPB11->LoRa_TXΪ115200 - * @param ulUsart2Baudrate - * @retval None - */ -void vUsart2Init(uint32_t ulUsart2Baudrate) -{ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Pin = USART2_GPIO_PIN_TX; - GPIO_Init(GPIOB, &GPIO_InitStructure); - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Pin = USART2_GPIO_PIN_RX; - GPIO_Init(GPIOB, &GPIO_InitStructure); - - USART_InitTypeDef USART_InitStructure; - USART_InitStructure.USART_BaudRate = ulUsart2Baudrate; // 趨USART_InitڲԶ9600ӦķƵϵдBRRĴ - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); - USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ,ʹ - USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // ģʽʹģʽûţģʽͽģʽ - USART_InitStructure.USART_Parity = USART_Parity_No; // Уλ - USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ - USART_InitStructure.USART_WordLength = USART_WordLength_8b; // ֳҪУ飬ֳѡ8λ - USART_Init(USART2,&USART_InitStructure); - // ǴڵIJѯģʽʹжϣҪжϣNVIC - USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); // ѡRXNEж,RXNE־λNVICRXNE־λ1ͻNVICжϣ֮жϺн - - NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // 飬4Ϊ4bitռȼ0bitӦȼռȼΪ0-15FreeRTOSûӦȼȼ4൱4λռȼ0λӦȼ - NVIC_InitTypeDef NVIC_InitStructure; // ʼNVICUSART1ͨ - NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; // жͨ - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5; // ռȼãFreeRTOSãڷΧڿԵFreeRTOSԡFromISR()βapi - // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // Ӧȼãò - NVIC_Init(&NVIC_InitStructure); // ָNVIC_InitStructureĵַ - - USART_Cmd(USART2,ENABLE); -} - -/** - * @brief ڷ͵ֽں - * @note ͿԴTXŷһֽݡ - * @param ucByte - * @retval None - */ -void vUsart2SendByte(uint8_t ucByte) -{ - USART_SendData(USART2, ucByte); // ByteдTDRĴ - // д֮Ҫȴһ£TDRתƵλĴͿˣݻTDRĴУдݾͻݸǣڷ֮Ҫȴһ±־λ - while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); // ݼĴձ־λȴTXE1Ҫһwhileѭ TXE:ݼĴգ־λԶ0ֶλ -} - -/** - * @brief ڷ麯 - * @note һ16ģʽ¡ - * @note uint8_tָָͣ׵ַ,޷жǷҪٴһLength - * @param *pucArrayusLength - * @retval None - */ -void vUsart2SendArray(uint8_t *pucArray, uint16_t usLength) -{ - for(uint16_t i = 0; i < usLength; i ++) // forѭִLengthΣԶArrayݽбʵʶ鲻Ҫuint16_tķΧ - { - vUsart2SendByte(pucArray[i]); // ȡArrayÿһ - } -} - -/** - * @brief ڷַ - * @note ַװָʽ鳤ֱ⵽ַĩβַݳȲɴַ͡ - * @param *pcString - * @retval None - */ -void vUsart2SendString(char *pcString) // uint8_t *ҲԣַԴһ־λԾͲҪٴݳȲ -{ - for(uint8_t i = 0; pcString[i] != '\0'; i++) // ѭͿñ־λж,'\0'ǿַתַʾʽֱд0һ - { - vUsart2SendByte(pcString[i]); // StringַһȡͨSendByte - } -} - -/** - * @brief printfض - * @note fputcprintfĵײ㣬printfڴӡʱ򣬾Dzϵfputcӡ - * @param ch,*f - * @retval ch - */ -int fputc(int ch, FILE *f) -{ - vUsart2SendByte(ch); - return ch; -} - -/** - * @brief printfװ - * @note һǽַڶǽտɱб - * @param *format,... - * @retval None - */ -void vUsart2Printf(char *format, ...) -{ - char String[100]; - va_list arg; // argǶһб - va_start(arg, format); // formatλÿʼղarg - vsprintf(String, format, arg); // װʽҪvsprintfΪsprintfֱֻܽдIJӡַʽformatarg - va_end(arg); // ͷŲ - vUsart2SendString(String); -} - -void USART2_IRQHandler(void) -{ - if (USART_GetITStatus(USART2, USART_IT_RXNE) == SET) - { - /* code */ - uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART2); - #if (USE_NONE_SYSTEM == 1) - #elif (USE_FREERTOS == 1) - BaseType_t xHigherPriorityTaskWoken = pdFALSE; - xQueueSendFromISR(xQueueUsart2IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken); - /* Դл */ - portYIELD_FROM_ISR(xHigherPriorityTaskWoken); - #elif (USE_OSAL == 1) - #endif - USART_ClearITPendingBit(USART2, USART_IT_RXNE); - } -} diff --git a/STM32/Gateway_Node/System/USART2.h b/STM32/Gateway_Node/System/USART2.h deleted file mode 100644 index 73db8f5..0000000 --- a/STM32/Gateway_Node/System/USART2.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef __USART2_H__ -#define __USART2_H__ - -#define USE_NONE_SYSTEM 0 -#define USE_FREERTOS 1 -#define USE_OSAL 0 -#define vEsp8266IrqHandler USART2_IRQHandler -#define USART2_GPIO_PIN_TX GPIO_Pin_2 -#define USART2_GPIO_PIN_RX GPIO_Pin_3 - -#if (USE_NONE_SYSTEM == 1) -#elif (USE_FREERTOS == 1) - #include "FreeRTOS.h" - #include "queue.h" -#elif (USE_OSAL == 1) -#endif - -#include "stm32f10x.h" // Device header -#include -#include -#include - -#if (USE_NONE_SYSTEM == 1) -#elif (USE_FREERTOS == 1) - extern QueueHandle_t xQueueUsart2IrqHdlr; -#elif (USE_OSAL == 1) -#endif - -void vUsart2Init(uint32_t ulUsart2Baudrate); -void vUsart2SendByte(uint8_t ucByte); -void vUsart2SendArray(uint8_t *pucArray, uint16_t usLength); -void vUsart2SendString(char *pcString); -void vUsart2Printf(char *format, ...); - -#endif diff --git a/STM32/Gateway_Node/System/USART3.c b/STM32/Gateway_Node/System/USART3.c deleted file mode 100644 index 46a3486..0000000 --- a/STM32/Gateway_Node/System/USART3.c +++ /dev/null @@ -1,142 +0,0 @@ -#include "USART3.h" - -/** - * @brief 3ijʼ - * @note ʹUSART3ڣPB10->LoRa_RXPB11->LoRa_TXΪ115200 - * @param ulUsart3Baudrate - * @retval None - */ -void vUsart3Init(uint32_t ulUsart3Baudrate) -{ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_TX; - GPIO_Init(GPIOB, &GPIO_InitStructure); - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_RX; - GPIO_Init(GPIOB, &GPIO_InitStructure); - - USART_InitTypeDef USART_InitStructure; - USART_InitStructure.USART_BaudRate = ulUsart3Baudrate; // 趨USART_InitڲԶ9600ӦķƵϵдBRRĴ - RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); - USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ,ʹ - USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // ģʽʹģʽûţģʽͽģʽ - USART_InitStructure.USART_Parity = USART_Parity_No; // Уλ - USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ - USART_InitStructure.USART_WordLength = USART_WordLength_8b; // ֳҪУ飬ֳѡ8λ - USART_Init(USART3,&USART_InitStructure); - // ǴڵIJѯģʽʹжϣҪжϣNVIC - USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); // ѡRXNEж,RXNE־λNVICRXNE־λ1ͻNVICжϣ֮жϺн - - NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // 飬4Ϊ4bitռȼ0bitӦȼռȼΪ0-15FreeRTOSûӦȼȼ4൱4λռȼ0λӦȼ - NVIC_InitTypeDef NVIC_InitStructure; // ʼNVICUSART1ͨ - NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; // жͨ - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5; // ռȼãFreeRTOSãڷΧڿԵFreeRTOSԡFromISR()βapi - // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // Ӧȼãò - NVIC_Init(&NVIC_InitStructure); // ָNVIC_InitStructureĵַ - - USART_Cmd(USART3,ENABLE); - - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_ATK_MD0; - GPIO_Init(GPIOB, &GPIO_InitStructure); - - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_ATK_AUX; - GPIO_Init(GPIOB, &GPIO_InitStructure); -} - -/** - * @brief ڷ͵ֽں - * @note ͿԴTXŷһֽݡ - * @param ucByte - * @retval None - */ -void vUsart3SendByte(uint8_t ucByte) -{ - USART_SendData(USART3, ucByte); // ByteдTDRĴ - // д֮Ҫȴһ£TDRתƵλĴͿˣݻTDRĴУдݾͻݸǣڷ֮Ҫȴһ±־λ - while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET); // ݼĴձ־λȴTXE1Ҫһwhileѭ TXE:ݼĴգ־λԶ0ֶλ -} - -/** - * @brief ڷ麯 - * @note һ16ģʽ¡ - * @note uint8_tָָͣ׵ַ,޷жǷҪٴһLength - * @param *pucArrayusLength - * @retval None - */ -void vUsart3SendArray(uint8_t *pucArray, uint16_t usLength) -{ - for(uint16_t i = 0; i < usLength; i ++) // forѭִLengthΣԶArrayݽбʵʶ鲻Ҫuint16_tķΧ - { - vUsart3SendByte(pucArray[i]); // ȡArrayÿһ - } -} - -/** - * @brief ڷַ - * @note ַװָʽ鳤ֱ⵽ַĩβַݳȲɴַ͡ - * @param *pcString - * @retval None - */ -void vUsart3SendString(char *pcString) // uint8_t *ҲԣַԴһ־λԾͲҪٴݳȲ -{ - for(uint8_t i = 0; pcString[i] != '\0'; i++) // ѭͿñ־λж,'\0'ǿַתַʾʽֱд0һ - { - vUsart3SendByte(pcString[i]); // StringַһȡͨSendByte - } -} - -///** -// * @brief printfض -// * @note fputcprintfĵײ㣬printfڴӡʱ򣬾Dzϵfputcӡ -// * @param ch,*f -// * @retval ch -// */ -//int fputc(int ch, FILE *f) -//{ -// vUsart3SendByte(ch); -// return ch; -//} - -///** -// * @brief printfװ -// * @note һǽַڶǽտɱб -// * @param *format,... -// * @retval None -// */ -//void vUsart3Printf(char *format, ...) -//{ -// char String[100]; -// va_list arg; // argǶһб -// va_start(arg, format); // formatλÿʼղarg -// vsprintf(String, format, arg); // װʽҪvsprintfΪsprintfֱֻܽдIJӡַʽformatarg -// va_end(arg); // ͷŲ -// vUsart3SendString(String); -//} - -void USART3_IRQHandler(void) -{ - if (USART_GetITStatus(USART3, USART_IT_RXNE) == SET) - { - /* code */ - uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART3); - #if (USE_NONE_SYSTEM == 1) - #elif (USE_FREERTOS == 1) - BaseType_t xHigherPriorityTaskWoken = pdFALSE; - xQueueSendFromISR(xQueueUsart3IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken); - /* Դл */ - portYIELD_FROM_ISR(xHigherPriorityTaskWoken); - #elif (USE_OSAL == 1) - #endif - USART_ClearITPendingBit(USART3, USART_IT_RXNE); - } -} diff --git a/STM32/Gateway_Node/System/USART3.h b/STM32/Gateway_Node/System/USART3.h deleted file mode 100644 index 850ab56..0000000 --- a/STM32/Gateway_Node/System/USART3.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __USART3_H__ -#define __USART3_H__ - -#define USE_NONE_SYSTEM 0 -#define USE_FREERTOS 1 -#define USE_OSAL 0 -#define vLoRaIrqHandler USART3_IRQHandler -#define USART3_GPIO_PIN_TX GPIO_Pin_10 -#define USART3_GPIO_PIN_RX GPIO_Pin_11 -#define USART3_GPIO_PIN_ATK_AUX GPIO_Pin_4 // PA4 -#define USART3_GPIO_PIN_ATK_MD0 GPIO_Pin_3 // PB3 - -#if (USE_NONE_SYSTEM == 1) -#elif (USE_FREERTOS == 1) - #include "FreeRTOS.h" - #include "queue.h" -#elif (USE_OSAL == 1) -#endif - -#include "stm32f10x.h" // Device header -#include -#include -#include - -#if (USE_NONE_SYSTEM == 1) -#elif (USE_FREERTOS == 1) - extern QueueHandle_t xQueueUsart3IrqHdlr; -#elif (USE_OSAL == 1) -#endif - -void vUsart3Init(uint32_t ulUsart3Baudrate); -void vUsart3SendByte(uint8_t ucByte); -void vUsart3SendArray(uint8_t *pucArray, uint16_t usLength); -void vUsart3SendString(char *pcString); -void vUsart3Printf(char *format, ...); - -#endif diff --git a/STM32/Gateway_Node/User/main.c b/STM32/Gateway_Node/User/main.c index 73b75db..16cbff2 100644 --- a/STM32/Gateway_Node/User/main.c +++ b/STM32/Gateway_Node/User/main.c @@ -38,10 +38,15 @@ void vTaskWifiConnection(void *pvParameters) { uint8_t ucRetvalQueueWifiSt = 0; uint8_t ucBufferQueueRec = 0; + vUsartPrintf(USART2, "AT+RST\r\n"); + vTaskDelay(1000); + vUsartPrintf(USART2, "AT+CWMODE=1\r\n"); + vTaskDelay(1000); + /* תַ */ + vUsartPrintf(USART2, "AT+CWJAP=\"Exploration\",\"IPSK25em.\"\r\n"); while (1) { - vUsartPrintf(USART2, "AT+RST\r\n"); - vTaskDelay(1000); + ucRetvalQueueWifiSt = xQueueReceive(xQueueUsart2IrqHdlr, &ucBufferQueueRec, pdMS_TO_TICKS(30)); /* code */ if (ucRetvalQueueWifiSt == pdTRUE)