Compare commits
11 Commits
8663e9f2ca
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| a9a2674db9 | |||
| dd946595c4 | |||
| 7708a22a6e | |||
| ce68cc42b3 | |||
| 3fc72c66be | |||
| 408af68973 | |||
| 2e6795f988 | |||
| bd85b7395e | |||
| 948c1324e1 | |||
| 0a950411df | |||
| c51e6a0ca0 |
75
README.md
75
README.md
@@ -6,38 +6,63 @@
|
||||
## 项目实现:
|
||||
### 一、使用FreeRTOS操作系统:
|
||||
**优点及作用:**
|
||||
可保证每个任务不会因为延迟被阻塞,大幅度减小远程操控的延迟。
|
||||
#### 以环境监测节点为例:
|
||||
可保证每个任务不会因为延迟被阻塞,大幅度减小远程操控的延迟,提高系统运行的稳定性。<br>
|
||||
#### 环境监测节点:
|
||||
**1、创建任务:**
|
||||
创建了LED状态灯任务、温湿度检测任务、向网关节点传输数据、从网关节点接收数据和检测执行器指令控制LED灯五个任务。
|
||||
创建了LED状态灯、温湿度检测、向网关节点传输数据、从网关节点接收数据和检测执行器指令控制LED灯五个任务。<br>
|
||||
**2、创建消息队列:**
|
||||
温湿度检测任务将采集到的温湿度数据通过队列发送到传输数据任务,实现数据的保护。
|
||||
温湿度检测任务将采集到的温湿度数据通过队列发送到传输数据任务,实现数据的保护。<br>
|
||||
**3、创建中断触发消息队列:**
|
||||
创建串口触发消息队列,当串口3接收到消息触发中断后,将数据包传送到消息队列,同时创建一个任务用于接收消息队列,并用于后续的检测接收到的数据包是否完整、是否有相关指令。
|
||||
创建串口触发消息队列,当串口3接收到消息触发中断后,将数据包传送到消息队列,同时创建一个任务用于接收消息队列,并用于后续的检测接收到的数据包是否完整、是否有相关指令。<br>
|
||||
**4、创建二值信号量:**
|
||||
创建检测LED指令消息队列,调用LoRa.c中检测数据包的函数,检测消息队列是否有相关的控制指令,若有相关的控制指令,则触发信号量;在其他任务中判断该信号量是否被触发,若被触发则控制LED灯开启,反之关闭。
|
||||
创建检测LED指令消息队列,调用LoRa.c中检测数据包的函数,检测消息队列是否有相关的控制指令,若有相关的控制指令,则触发信号量;在其他任务中判断该信号量是否被触发,若被触发则控制LED灯开启,反之关闭。<br>
|
||||
#### 网关节点:
|
||||
**1、创建任务:**
|
||||
创建了LED状态灯、Wi-Fi初始化、向子节点传输数据、从子节点接收数据、MQTT上发、MQTT下发6个任务。<br>
|
||||
|
||||
### 二、自定义传输协议:
|
||||
自定义传输协议仿照了ModBus传输协议,其完善性相比有欠缺,但是可满足非大型项目的基本使用。在自定义传输协议中,使用十六进制数字进行传输,分别由网关节点和子节点,这里拿子节点举例。子节点的传输协议主要分为帧头、传感器ID、传感器数据、执行器ID、执行器指令和帧尾。其中,帧头(也是节点ID),用于声明自己是哪个节点上发的数据;传感器ID,用于声明自己是什么传感器;传感器数据,如DHT11温湿度数据;执行器ID也是同理,用于声明自己是什么执行器;执行器指令,一般是0或1,0为关、1为开,用于在执行网关节点下发的控制指令后的返回结果,告诉网关节点是开了还是关了,是否成功,若失败了是什么原因;最后一个是帧尾,为帧头倒写,添加帧头和帧尾的目的是在网关接收多个节点的数据是验证其数据是否完整,不会被其他上传的数据打断。
|
||||
**1、节点:**
|
||||
*节点ID:*
|
||||
D1为子节点1,D2为子节点2,以此类推。
|
||||
*传感器ID:*
|
||||
EA为DHT11温湿度传感器,EB为MQ2烟雾浓度传感器、EC为火焰传感器、ED为光敏传感器。
|
||||
*传感器数据:*
|
||||
如17、35:17为温度数据、35为湿度数据,将其转化为10进制,分别为23℃、湿度53%。
|
||||
*执行器ID:*
|
||||
FA为LED灯、FB为小风扇、FC为加湿器、FD为蜂鸣器、FE为舵机。
|
||||
*执行器数据*
|
||||
0为关、1为开。
|
||||
*帧尾:*
|
||||
D1倒过来就是1D,以此类推。
|
||||
| 目标地址 | 目标信道 | 帧头(也是节点ID) | 传感器ID | 传感器数据 | 执行器ID | 执行器数据 | 帧尾(为帧头倒写) |
|
||||
| 03 E9 | 17 | D1 | EA | 17 35 | FA | 00 | 1D |
|
||||
自定义传输协议仿照了ModBus传输协议,其完善性相比有欠缺,但是可满足非大型项目的基本使用。在自定义传输协议中,使用十六进制数字进行传输,分别由网关节点和子节点。<br>
|
||||
**1、节点:**<br>
|
||||
**规则:**
|
||||
子节点的传输协议主要分为帧头、传感器ID、传感器数据、执行器ID、执行器指令和帧尾。其中,帧头(也是节点ID),用于声明自己是哪个节点上发的数据;传感器ID,用于声明自己是什么传感器;传感器数据,如DHT11温湿度数据;执行器ID也是同理,用于声明自己是什么执行器;执行器指令,一般是0或1,0为关、1为开,用于在执行网关节点下发的控制指令后的返回结果,告诉网关节点是开了还是关了,是否成功,若失败了是什么原因;最后一个是帧尾,为帧头倒写,添加帧头和帧尾的目的是在网关接收多个节点的数据是验证其数据是否完整,不会被其他上传的数据打断。<br>
|
||||
**节点ID:**
|
||||
D1为子节点1,D2为子节点2,以此类推。<br>
|
||||
**传感器ID:**
|
||||
EA为DHT11温湿度传感器,EB为MQ2烟雾浓度传感器、EC为火焰传感器、ED为光敏传感器。<br>
|
||||
**传感器数据:**
|
||||
如17、35:17为温度数据、35为湿度数据,将其转化为10进制,分别为23℃、湿度53%。<br>
|
||||
**执行器ID:**
|
||||
FA为LED灯、FB为小风扇、FC为加湿器、FD为蜂鸣器、FE为舵机、FF为加热片。<br>
|
||||
**执行器指令**
|
||||
0为关、1为开。<br>
|
||||
**帧尾:**
|
||||
D1倒过来就是1D,以此类推。<br>
|
||||
|
||||
| 目标地址 | 目标信道 | 帧头(也是节点ID) | 传感器ID | 传感器数据 | 执行器ID | 执行器指令 | 帧尾(为帧头倒写) |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 03 E9 | 17 | D1 | EA | 17 35 | FA | 01 | 1D |
|
||||
|
||||
**2、网关:**
|
||||
**规则:**
|
||||
网关的传输协议主要分为帧头、执行器ID、执行器指令和帧尾。其中,帧头也是节点ID,用于声明控制的是哪个节点的设备;执行器ID,同理一般是0或1,用于声明控制的是哪个设备;执行器指令用于声明执行器是开还是关;最后一个是帧尾,为帧头倒写。*节点ID、执行器ID与上面相同。*<br>
|
||||
**执行器指令:**
|
||||
一共有两种,一种是常规的0和1,另外一种是温控模式,用于控制温度范围,若超过这个范围就会触发执行器的指令。温控模式默认常开,控制字为02,后面跟的是温控的数据,也就是限定的温湿度数值,如17 20 35 50,就是温度在23~26度之间,湿度在53%~80%之间。
|
||||
|
||||
*常规模式*
|
||||
| 目标地址 | 目标信道 | 帧头(也是节点ID)| 执行器ID | 执行器指令 | 帧尾(为帧头倒写) |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 03 E9 | 17 | D1 | FA | 01 | 1D |
|
||||
|
||||
*温控模式*
|
||||
|
||||
| 目标地址 | 目标信道 | 帧头(也是节点ID)| 执行器ID | 执行器指令 | 温控模式02 | 温控数据 | 帧尾(为帧头倒写) |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| 03 E9 | 17 | D1 | FA | 01 | 02 | 17 20 35 50 | 1D |
|
||||
|
||||
## 本系统在FreeRTOS中引用的api:
|
||||
### 一、多任务创建与运行
|
||||
**1、概念:**
|
||||
通过定义任务句柄、名称、优先级,从而实现多任务同时在单核的单片机中以并发或抢占的形式运行。在FreeRTOS中,时钟源频率通常被设定为1kHz(#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )),时间片1tick也就是1ms。在任务优先级相同的情况下,多个任务按照一个时间片切换运行,也就是轮询式调度;当其中一个任务的优先级较高时(数值较高),该任务会打断其他任务的运行,也就是抢占式调度。在创建任务后,会产生任务控制块,简称TCB,TCB在切换任务的时候,会将创建任务的指针保存到创建的栈里,也就是保存任务现场,直到任务切换过来后再复原现场。FreeRTOS的任务分为4个状态,分别为就绪态、运行态、挂起态和阻塞态,当其中一个任务遇到延时等情况,会进入到阻塞态,会执行其他任务知道延时结束,低优先级任务被高优先级任务打断也同理。
|
||||
通过定义任务句柄、名称、优先级,从而实现多任务同时在单核的单片机中以并发或抢占的形式运行。在FreeRTOS中,时钟源频率通常被设定为1kHz(#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )),时间片1tick也就是1ms。在任务优先级相同的情况下,多个任务按照一个时间片切换运行,也就是轮询式调度;当其中一个任务的优先级较高时(数值较高),该任务会打断其他任务的运行,也就是抢占式调度。在创建任务后,会产生任务控制块,简称TCB,TCB在切换任务的时候,会将创建任务的指针保存到创建的栈里,也就是保存任务现场,直到任务切换过来后再复原现场。FreeRTOS的任务分为4个状态,分别为就绪态、运行态、挂起态和阻塞态,当其中一个任务遇到延时等情况,会进入到阻塞态,会执行其他任务知道延时结束,低优先级任务被高优先级任务打断也同理。<br>
|
||||
**2、使用到的api函数:**
|
||||
- 任务函数:
|
||||
```c
|
||||
@@ -60,7 +85,7 @@ vTaskStartScheduler();
|
||||
```
|
||||
### 二、消息队列:
|
||||
**1、概念:**
|
||||
在初始化消息队列函数种,有两个参数,第一个是队列的长度,也就是这个队列能存放多少个数据;第二个参数就是每个数据的大小,单位为字节,在stm32中uint8_t指针的长度一般是4字节。在多个任务需要共用一个变量值以传递数据的时候,使用消息队列可以很好地保护数据的传输不会被其他用到相关变量的任务干扰。消息队列通过发送队列和接收队列的函数,将不同的任务搭建起一个传递参数的桥梁,从而确保传递数据时不被其他任务干扰,造成数据的误差。如DHT11接收到温湿度数据,将温湿度数据传输到LoRa发送数据的任务中。
|
||||
在初始化消息队列函数种,有两个参数,第一个是队列的长度,也就是这个队列能存放多少个数据;第二个参数就是每个数据的大小,单位为字节,在stm32中uint8_t指针的长度一般是4字节。在多个任务需要共用一个变量值以传递数据的时候,使用消息队列可以很好地保护数据的传输不会被其他用到相关变量的任务干扰。消息队列通过发送队列和接收队列的函数,将不同的任务搭建起一个传递参数的桥梁,从而确保传递数据时不被其他任务干扰,造成数据的误差。如DHT11接收到温湿度数据,将温湿度数据传输到LoRa发送数据的任务中。<br>
|
||||
**2、使用到的api函数:**
|
||||
- 创建队列句柄:
|
||||
```c
|
||||
@@ -88,7 +113,7 @@ xQueueReceive(xQueueHandler, <要传递的变量,指向其地址>, portMAX_DEL
|
||||
```
|
||||
### 三、信号量:
|
||||
**1、概念:**
|
||||
信号量一般用于任务管理。常用的分为二值信号量、计数型信号量和互斥信号量3种信号量,其中二值信号量全称为二进制信号量,用于任务同步,类似于状态机,而后两者分别用于多资源和单资源的管理,资源管理就相当于停车场,多资源管理相当于停车场的多个车位,若停车位停满车就不能停车了,单资源同理。这三种信号量都只有0或1两种值。使用信号量的过程,以二值信号量为例,为创建二值信号量->释放二值信号量->获取二值信号量。释放二值信号量共有两个函数,释放任务中信号量和释放中断中信号量。信号量和状态机类似,释放信号量就相当于改变标志位,而获取信号量相当于获取改变的标志位以决定是否改变执行器的状态。由于只有0和1两种值,因此适用于只有开和关两种状态的执行器。
|
||||
信号量一般用于任务管理。常用的分为二值信号量、计数型信号量和互斥信号量3种信号量,其中二值信号量全称为二进制信号量,用于任务同步,类似于状态机,而后两者分别用于多资源和单资源的管理,资源管理就相当于停车场,多资源管理相当于停车场的多个车位,若停车位停满车就不能停车了,单资源同理。这三种信号量都只有0或1两种值。使用信号量的过程,以二值信号量为例,为创建二值信号量->释放二值信号量->获取二值信号量。释放二值信号量共有两个函数,释放任务中信号量和释放中断中信号量。信号量和状态机类似,释放信号量就相当于改变标志位,而获取信号量相当于获取改变的标志位以决定是否改变执行器的状态。由于只有0和1两种值,因此适用于只有开和关两种状态的执行器。<br>
|
||||
**2、使用到的api函数:**
|
||||
- 动态创建二值信号量:
|
||||
```c
|
||||
|
||||
@@ -1,64 +1,127 @@
|
||||
#include "DHT11.h"
|
||||
|
||||
//<2F><>λDHT11
|
||||
void vDht11Rst(void)
|
||||
/**
|
||||
* @brief DHT11<31><31><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD>DHT11<31><31>IO<49><4F>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>
|
||||
* @param ucMode ģʽѡ<CABD><D1A1><EFBFBD><EFBFBD>1Ϊ<31><CEAA><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>0Ϊ<30><CEAA><EFBFBD><EFBFBD>ģʽ
|
||||
* @retval None
|
||||
*/
|
||||
void vDht11Mode(uint8_t ucMode)
|
||||
{
|
||||
vDht11Mode(OUT); //SET OUTPUT
|
||||
DHT11_Low; //<2F><><EFBFBD><EFBFBD>DQ
|
||||
vDelayMs(20); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>18~30ms
|
||||
DHT11_High; //DQ=1
|
||||
vDelayUs(13); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10~35us
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
|
||||
if(ucMode)
|
||||
{
|
||||
GPIO_InitStructure.GPIO_Pin = DHT11_GPIO_PIN;
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
||||
}
|
||||
else
|
||||
{
|
||||
GPIO_InitStructure.GPIO_Pin = DHT11_GPIO_PIN;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
|
||||
}
|
||||
GPIO_Init(DHT11_GPIO_PORT, &GPIO_InitStructure);
|
||||
}
|
||||
|
||||
//<2F>ȴ<EFBFBD>DHT11<31>Ļ<EFBFBD>Ӧ
|
||||
//<2F><><EFBFBD><EFBFBD>1:δ<><CEB4><EFBFBD>DHT11<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/**
|
||||
* @brief DHT11<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DHT11<31><31><EFBFBD><EFBFBD>λ<EFBFBD>źţ<C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vDht11Rst(void)
|
||||
{
|
||||
vDht11Mode(DHT11_MODE_OUT); // SET OUTPUT
|
||||
DHT11_Low; // <20><><EFBFBD><EFBFBD>DQ
|
||||
vDelayMs(20); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>18~30ms
|
||||
DHT11_High; // DQ=1
|
||||
vDelayUs(13); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10~35us
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief DHT11<31><31><EFBFBD>麯<EFBFBD><E9BAAF>
|
||||
* @note <20><><EFBFBD><EFBFBD>DHT11<31>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ӧ<EFBFBD>ź<EFBFBD><C5BA>жϡ<D0B6>
|
||||
* @param None
|
||||
* @retval 0:<3A><><EFBFBD><EFBFBD> 1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
uint8_t vDht11Check(void)
|
||||
{
|
||||
uint8_t retry=0;
|
||||
vDht11Mode(IN);//SET INPUT
|
||||
while (GPIO_ReadInputDataBit(DHT11_GPIO_PORT,DHT11_GPIO_PIN)&&retry<100)//DHT11<31><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>40~80us
|
||||
vDht11Mode(DHT11_MODE_IN);//SET INPUT
|
||||
while (GPIO_ReadInputDataBit(DHT11_GPIO_PORT, DHT11_GPIO_PIN)&&retry<100) // DHT11<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>40~80us
|
||||
{
|
||||
retry++;
|
||||
vDelayUs(1);
|
||||
};
|
||||
if(retry>=100)return 1;
|
||||
if(retry>=100)
|
||||
return 1;
|
||||
else retry=0;
|
||||
while (!GPIO_ReadInputDataBit(DHT11_GPIO_PORT,DHT11_GPIO_PIN)&&retry<100)//DHT11<31><31><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD>ٴ<EFBFBD><D9B4><EFBFBD><EFBFBD><EFBFBD>40~80us
|
||||
while (!GPIO_ReadInputDataBit(DHT11_GPIO_PORT, DHT11_GPIO_PIN)&&retry<100) // DHT11<EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>40~80us
|
||||
{
|
||||
retry++;
|
||||
vDelayUs(1);
|
||||
};
|
||||
if(retry>=100)return 1;
|
||||
if(retry>=100)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//<2F><>DHT11<31><31>ȡһ<C8A1><D2BB>λ
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>1/0
|
||||
/**
|
||||
* @brief DHT11<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><>ʼ<EFBFBD><CABC>DHT11<31><31>IO<49>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DHT11<31>Ĵ<EFBFBD><C4B4>ڡ<EFBFBD>
|
||||
* @param None
|
||||
* @retval 0:<3A><><EFBFBD><EFBFBD>;1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
uint8_t vDht11Init(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
RCC_APB2PeriphClockCmd(DHT11_GPIO_CLK, ENABLE); // ʹ<><CAB9>PA<50>˿<EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
GPIO_InitStructure.GPIO_Pin = DHT11_GPIO_PIN; // PG11<31>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_Init(DHT11_GPIO_PORT, &GPIO_InitStructure); // <20><>ʼ<EFBFBD><CABC>IO<49><4F>
|
||||
GPIO_SetBits(DHT11_GPIO_PORT, DHT11_GPIO_PIN); // PG11 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
vDht11Rst(); // <20><>λDHT11
|
||||
return vDht11Check(); // <20>ȴ<EFBFBD>DHT11<31>Ļ<EFBFBD>Ӧ
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief DHT11<31><31>ȡλ<C8A1><CEBB><EFBFBD><EFBFBD>
|
||||
* @note <20><>DHT11<31><31>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>1<EFBFBD><31>
|
||||
* @param None
|
||||
* @retval <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>λֵ<CEBB><D6B5>1<EFBFBD><31>0
|
||||
*/
|
||||
uint8_t vDht11ReadBit(void)
|
||||
{
|
||||
uint8_t retry=0;
|
||||
while(GPIO_ReadInputDataBit(DHT11_GPIO_PORT,DHT11_GPIO_PIN)&&retry<100)//<2F>ȴ<EFBFBD><C8B4><EFBFBD>Ϊ<EFBFBD>͵<EFBFBD>ƽ
|
||||
while(GPIO_ReadInputDataBit(DHT11_GPIO_PORT, DHT11_GPIO_PIN)&&retry<100) // <EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>͵<EFBFBD>ƽ
|
||||
{
|
||||
retry++;
|
||||
vDelayUs(1);
|
||||
}
|
||||
retry=0;
|
||||
while(!GPIO_ReadInputDataBit(DHT11_GPIO_PORT,DHT11_GPIO_PIN)&&retry<100)//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ
|
||||
while(!GPIO_ReadInputDataBit(DHT11_GPIO_PORT, DHT11_GPIO_PIN)&&retry<100) // <EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ
|
||||
{
|
||||
retry++;
|
||||
vDelayUs(1);
|
||||
}
|
||||
vDelayUs(40);//<2F>ȴ<EFBFBD>40us
|
||||
if(GPIO_ReadInputDataBit(DHT11_GPIO_PORT,DHT11_GPIO_PIN))return 1;
|
||||
if(GPIO_ReadInputDataBit(DHT11_GPIO_PORT, DHT11_GPIO_PIN))
|
||||
return 1;
|
||||
else return 0;
|
||||
}
|
||||
|
||||
//<2F><>DHT11<31><31>ȡһ<C8A1><D2BB><EFBFBD>ֽ<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/**
|
||||
* @brief DHT11<31><31>ȡ<EFBFBD>ֽں<EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><>DHT11<31><31>ȡһ<C8A1><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݣ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ8<C8A1><38>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ϳ<EFBFBD><CFB3>ֽڡ<D6BD>
|
||||
* @param None
|
||||
* @retval <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
uint8_t vDht11ReadByte(void)
|
||||
{
|
||||
uint8_t i,dat;
|
||||
uint8_t i, dat;
|
||||
dat=0;
|
||||
for (i=0;i<8;i++)
|
||||
{
|
||||
@@ -68,11 +131,13 @@ uint8_t vDht11ReadByte(void)
|
||||
return dat;
|
||||
}
|
||||
|
||||
//<2F><>DHT11<EFBFBD><EFBFBD>ȡһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//temp:<3A>¶<EFBFBD>ֵ(<28><>Χ:0~50<35><30>)
|
||||
//humi:ʪ<><CAAA>ֵ(<28><>Χ:20%~90%)
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>0,<2C><><EFBFBD><EFBFBD>;1,<2C><>ȡʧ<EFBFBD><EFBFBD>
|
||||
uint8_t vDht11ReadData(uint8_t *pucTemp,uint8_t *pucHumi)
|
||||
/** @brief DHT11<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><>DHT11<31><31>ȡ<EFBFBD>¶Ⱥ<C2B6>ʪ<EFBFBD><CAAA><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>顣
|
||||
* @param *pucTemp ָ<><D6B8><EFBFBD>洢<EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD>ݵı<DDB5><C4B1><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* @param *pucHumi ָ<><D6B8><EFBFBD>洢ʪ<E6B4A2><CAAA><EFBFBD><EFBFBD><EFBFBD>ݵı<DDB5><C4B1><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
* @retval 0:<3A><><EFBFBD><EFBFBD>;1:<3A><>ȡʧ<C8A1><CAA7>
|
||||
*/
|
||||
uint8_t vDht11ReadData(uint8_t *pucTemp, uint8_t *pucHumi)
|
||||
{
|
||||
uint8_t ucBuffer[5];
|
||||
uint8_t i;
|
||||
@@ -92,38 +157,3 @@ uint8_t vDht11ReadData(uint8_t *pucTemp,uint8_t *pucHumi)
|
||||
else return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>DHT11<31><31>IO<49><4F> DQ ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>DHT11<31>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>0:<3A><><EFBFBD><EFBFBD>
|
||||
uint8_t vDht11Init(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
RCC_APB2PeriphClockCmd(DHT11_GPIO_CLK, ENABLE); //ʹ<><CAB9>PA<50>˿<EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
GPIO_InitStructure.GPIO_Pin = DHT11_GPIO_PIN; //PG11<31>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_Init(DHT11_GPIO_PORT, &GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>IO<49><4F>
|
||||
GPIO_SetBits(DHT11_GPIO_PORT,DHT11_GPIO_PIN); //PG11 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
vDht11Rst(); //<2F><>λDHT11
|
||||
return vDht11Check();//<2F>ȴ<EFBFBD>DHT11<31>Ļ<EFBFBD>Ӧ
|
||||
}
|
||||
|
||||
void vDht11Mode(uint8_t ucMode)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
|
||||
if(ucMode)
|
||||
{
|
||||
GPIO_InitStructure.GPIO_Pin = DHT11_GPIO_PIN;
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
||||
}
|
||||
else
|
||||
{
|
||||
GPIO_InitStructure.GPIO_Pin = DHT11_GPIO_PIN;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
|
||||
}
|
||||
GPIO_Init(DHT11_GPIO_PORT, &GPIO_InitStructure);
|
||||
}
|
||||
|
||||
@@ -10,23 +10,23 @@
|
||||
#define DHT11_GPIO_PIN GPIO_Pin_1
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD> */
|
||||
#define OUT 1
|
||||
#define IN 0
|
||||
#define DHT11_MODE_OUT 1
|
||||
#define DHT11_MODE_IN 0
|
||||
/* <20><><EFBFBD><EFBFBD>DHT11<31><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ͵<DFB5>ƽ */
|
||||
#define DHT11_Low GPIO_ResetBits(DHT11_GPIO_PORT,DHT11_GPIO_PIN)
|
||||
#define DHT11_High GPIO_SetBits(DHT11_GPIO_PORT,DHT11_GPIO_PIN)
|
||||
#define DHT11_Low GPIO_ResetBits(DHT11_GPIO_PORT, DHT11_GPIO_PIN)
|
||||
#define DHT11_High GPIO_SetBits(DHT11_GPIO_PORT, DHT11_GPIO_PIN)
|
||||
|
||||
typedef struct {
|
||||
uint8_t ucTemp;
|
||||
uint8_t ucHumi;
|
||||
} DHT11Data_t;
|
||||
|
||||
void vDht11Rst(void);//<2F><>λDHT11
|
||||
uint8_t vDht11Check(void);//<2F><><EFBFBD><EFBFBD>DHT11
|
||||
uint8_t vDht11ReadBit(void);//<2F><>ȡһλ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t vDht11ReadByte(void);//<2F><>ȡһ<C8A1><D2BB><EFBFBD>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t vDht11ReadData(uint8_t *pucTemp,uint8_t *pucHumi);//<2F><>ȡ<EFBFBD><EFBFBD>ʪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t vDht11Init(void);//<2F><>ʼ<EFBFBD><EFBFBD>DHT11
|
||||
void vDht11Mode(uint8_t ucMode);//DHT11<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void vDht11Mode(uint8_t ucMode); // DHT11<31><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
|
||||
void vDht11Rst(void); // <EFBFBD><EFBFBD>λDHT11
|
||||
uint8_t vDht11Init(void); // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>DHT11
|
||||
uint8_t vDht11Check(void); // <20><><EFBFBD><EFBFBD>DHT11
|
||||
uint8_t vDht11ReadBit(void); // <EFBFBD><EFBFBD>ȡһλ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t vDht11ReadByte(void); // <EFBFBD><EFBFBD>ȡһ<EFBFBD><EFBFBD><EFBFBD>ֽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t vDht11ReadData(uint8_t *pucTemp, uint8_t *pucHumi); // <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ʪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -4,10 +4,9 @@
|
||||
|
||||
#include "stm32f10x.h" // Device header
|
||||
|
||||
#define LED_PC13_WORK_MODE LED_PC13_LIGHT_MODE
|
||||
|
||||
#define LED_PC13_STM32_STATE_MODE 0
|
||||
#define LED_PC13_LIGHT_MODE 1
|
||||
#define LED_PC13_WORK_MODE LIGHT_MODE
|
||||
#define STM32_STATE_MODE 0
|
||||
#define LIGHT_MODE 1
|
||||
|
||||
/* PC13LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
#define LED_PC13_GPIO_CLOCK RCC_APB2Periph_GPIOC
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
#include "Relay.h"
|
||||
|
||||
/**
|
||||
* @brief PA0????????
|
||||
* @note ???PA0???????????????????????
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vPa0RelayInit(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
@@ -13,11 +19,23 @@ void vPa0RelayInit(void)
|
||||
vPa0RelayOff();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief PA0???????
|
||||
* @note ?PA0???????????????
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vPa0RelayOn(void)
|
||||
{
|
||||
GPIO_SetBits(PA0_RELAY_GPIO_PORT,PA0_RELAY_GPIO_PIN);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief PA0???????
|
||||
* @note ?PA0???????????????
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vPa0RelayOff()
|
||||
{
|
||||
GPIO_ResetBits(PA0_RELAY_GPIO_PORT,PA0_RELAY_GPIO_PIN);
|
||||
|
||||
@@ -57,8 +57,8 @@
|
||||
/* ʱ<><CAB1>Ƭ<EFBFBD><C6AC><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>ͬʱִ<CAB1><D6B4> */
|
||||
#define configUSE_TIME_SLICING 1
|
||||
/* <20><><EFBFBD>С<EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA>ر<EFBFBD> */
|
||||
#define configUSE_QUEUE_SETS 1
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>ܣ<EFBFBD>Ĭ<EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> */
|
||||
#define configUSE_QUEUE_SETS 0
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>Ĭ<EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD> */
|
||||
#define configUSE_TASK_NOTIFICATIONS 1
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
#define configUSE_MUTEXES 0
|
||||
@@ -70,7 +70,7 @@
|
||||
#define configQUEUE_REGISTRY_SIZE 10
|
||||
#define configUSE_APPLICATION_TASK_TAG 0
|
||||
/* FreeRTOS<4F><53><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1> */
|
||||
/* ֧<>ֶ<EFBFBD>̬<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>루<EFBFBD><EFBFBD>ʹ<EFBFBD>ö<EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD> */
|
||||
/* ֧<>ֶ<EFBFBD>̬<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD> */
|
||||
#define configSUPPORT_DYNAMIC_ALLOCATION 1
|
||||
/* ֧<>־<EFBFBD>̬<EFBFBD>ڴ<EFBFBD> */
|
||||
#define configSUPPORT_STATIC_ALLOCATION 0
|
||||
@@ -82,8 +82,6 @@
|
||||
/* FreeRTOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4>ռ<EFBFBD><D5BC>йص<D0B9><D8B5><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1> */
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ͳ<EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD> */
|
||||
#define configGENERATE_RUN_TIME_STATS 0
|
||||
#define configUSE_STATS_FORMATTING_FUNCTIONS 0
|
||||
#define configRECORD_STACK_HIGH_ADDRESS 0
|
||||
|
||||
/* Co-routine definitions. */
|
||||
/* <20><><EFBFBD><EFBFBD>Э<EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>croutine.c */
|
||||
@@ -118,7 +116,7 @@
|
||||
* 4.һ<><D2BB>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><DEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>ĿΪ32
|
||||
* һ<><D2BB><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õģ<C3B5>MCUû<55><C3BB><EFBFBD><EFBFBD>ЩӲ<D0A9><D3B2>ָ<EFBFBD><D6B8><EFBFBD>Ļ<EFBFBD><C4BB>˺<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0 !
|
||||
*/
|
||||
#define configUSE_PORT_OPTIMISED_TASK SELECTION 1
|
||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||
/*
|
||||
* configUSE_TICKLESS_IDLE
|
||||
|
||||
@@ -160,7 +158,6 @@ to exclude the API function. */
|
||||
#else
|
||||
#define configPRIO_BITS 4
|
||||
#endif
|
||||
/* <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5-15<31><35>FreeRTOS<4F><53><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD><EFBFBD>ģ<EFBFBD>0-4<><34>FreeRTOS<4F><53><EFBFBD><EFBFBD><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD><EFBFBD>ġ<EFBFBD> */
|
||||
/* <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD> */
|
||||
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
|
||||
/* ϵͳ<CFB5>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD> */
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -936,7 +936,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>System</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -1016,7 +1016,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>Drivers</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -1120,7 +1120,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>FreeRTOS/inc</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -1344,7 +1344,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>FreeRTOS/src</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -1436,7 +1436,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>FreeRTOS/portable</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -1480,7 +1480,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>FreeRTOS/config</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
|
||||
@@ -2,9 +2,12 @@
|
||||
|
||||
#if MODE == USE_SYS_TICK
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>ӳٺ<D3B3><D9BA><EFBFBD>
|
||||
//SYSTICK<43><4B>ʱ<EFBFBD>ӹ̶<D3B9>ΪAHBʱ<42>ӵ<EFBFBD>1/8
|
||||
//SYSCLK:ϵͳʱ<CDB3><CAB1>Ƶ<EFBFBD><C6B5>
|
||||
/**
|
||||
* @brief <20><>ʼ<EFBFBD><CABC><EFBFBD>ӳٺ<D3B3><D9BA><EFBFBD>
|
||||
* @note <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>SYSTICK<43><4B>ʱ<EFBFBD>ӹ̶<D3B9>ΪAHBʱ<42>ӵ<EFBFBD>1/8<><38>SYSCLK:ϵͳʱ<CDB3><CAB1>Ƶ<EFBFBD><C6B5>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vDelayInit(void)
|
||||
{
|
||||
uint8_t ucSYSCLK;
|
||||
@@ -13,29 +16,26 @@ void vDelayInit(void)
|
||||
xUcFacInit.usFacMs=(uint16_t)xUcFacInit.ucFacUs*1000;
|
||||
}
|
||||
|
||||
//<2F><>ʱnus
|
||||
//nusΪҪ<CEAA><D2AA>ʱ<EFBFBD><CAB1>us<75><73>.
|
||||
/**
|
||||
* @brief <>뼶<EFBFBD><EBBCB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ16777215us
|
||||
* @param ulNus: <20><>ʱ<EFBFBD><CAB1><EFBFBD><CEA2><EFBFBD><EFBFBD>
|
||||
* @retval None
|
||||
*/
|
||||
void vDelayUs(uint32_t ulNus)
|
||||
{
|
||||
uint32_t ulTemp;
|
||||
SysTick->LOAD=ulNus*xUcFacInit.ucFacUs; //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->VAL=0x00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
SysTick->LOAD=ulNus*xUcFacInit.ucFacUs; // ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->VAL=0x00; // <EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
do
|
||||
{
|
||||
ulTemp=SysTick->CTRL;
|
||||
} while((ulTemp&0x01)&&!(ulTemp&(1<<16))); //<2F>ȴ<EFBFBD>ʱ<EFBFBD>䵽<EFBFBD><E4B5BD>
|
||||
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->VAL =0x00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
} while((ulTemp&0x01)&&!(ulTemp&(1<<16))); // <EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD>䵽<EFBFBD><EFBFBD>
|
||||
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; // <EFBFBD>رռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->VAL =0x00; // <EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//<2F><>ʱnms
|
||||
//ע<><D7A2>nms<6D>ķ<EFBFBD>Χ
|
||||
//SysTick->LOADΪ24λ<34>Ĵ<EFBFBD><C4B4><EFBFBD>,<2C><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱΪ:
|
||||
//nms<=0xffffff*8*1000/SYSCLK
|
||||
//SYSCLK<4C><4B>λΪHz,nms<6D><73>λΪms
|
||||
//<2F><>72M<32><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,nms<=1864
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD>뼶<EFBFBD><EBBCB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD>Systick<63><6B>ʱ<EFBFBD><CAB1>Ϊ24λ<34><CEBB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ֵΪ0xFFFFFF<46><46>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>16777215<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>0xFFFFFF<46><46><EFBFBD><EFBFBD>ʵ<EFBFBD>ʼ<EFBFBD><CABC>ص<EFBFBD>ֵ<EFBFBD><D6B5>ȡģ<C8A1><C4A3><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD><EFBFBD>̡<EFBFBD>
|
||||
@@ -66,62 +66,67 @@ void vDelayMs(uint16_t usNms)
|
||||
|
||||
#elif MODE == USE_DWT
|
||||
|
||||
/**
|
||||
* @brief DWT<57><54>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
* @note DWT<57><54>ʱ<EFBFBD><CAB1><EFBFBD>ȸߣ<C8B8><DFA3>ʺ϶<CABA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vDelayInit(void)
|
||||
{
|
||||
//ʹ<><CAB9>DWT<57><54><EFBFBD><EFBFBD>
|
||||
DEMCR |= (uint32_t)TRCENA;
|
||||
|
||||
//DWT CYCCNT<4E>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
DWT_CYCCNT = (uint32_t)0u;
|
||||
|
||||
//ʹ<><CAB9>Cortex-M3 DWT CYCCNT<4E>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
DWT_CTRL |= (uint32_t)DWT_CTRL_CYCCNTENA;
|
||||
DEMCR |= (uint32_t)TRCENA; // ʹ<EFBFBD><EFBFBD>DWT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DWT_CYCCNT = (uint32_t)0u; // CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DWT_CTRL |= (uint32_t)DWT_CTRL_CYCCNTENA; // ʹ<><CAB9>CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
// <><CEA2><EFBFBD><EFBFBD>ʱ
|
||||
/**
|
||||
* @brief <>뼶<EFBFBD><EBBCB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ10000us
|
||||
* @param ulNus: <20><>ʱ<EFBFBD><CAB1><EFBFBD><CEA2><EFBFBD><EFBFBD>
|
||||
* @retval None
|
||||
*/
|
||||
void vDelayUs(uint32_t ulNus)
|
||||
{
|
||||
if(ulNus > 10000) ulNus = 10000;
|
||||
|
||||
uint32_t ulTicksStart, ulTicksEnd, ulTicksDelay;
|
||||
|
||||
ulTicksStart = DWT_CYCCNT;
|
||||
ulTicksDelay = ( ulNus * ( SystemCoreClock / (1000000) ) ); // <20><><EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵδ<C9B5><CEB4><EFBFBD>
|
||||
ulTicksEnd = ulTicksStart + ulTicksDelay;
|
||||
|
||||
// ulTicksEndû<64><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/* <20><>ulTicksEndû<64><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ */
|
||||
if ( ulTicksEnd >= ulTicksStart )
|
||||
{
|
||||
// DWT_CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(DWT_CYCCNT > ulTicksStart)
|
||||
if(DWT_CYCCNT > ulTicksStart) // DWT_CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
while( DWT_CYCCNT < ulTicksEnd );
|
||||
}
|
||||
// DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>
|
||||
/* DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>ʱ */
|
||||
else
|
||||
{
|
||||
// <20>Ѿ<EFBFBD><D1BE><EFBFBD>ʱ<EFBFBD><CAB1>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
||||
return;
|
||||
return; // <20>Ѿ<EFBFBD><D1BE><EFBFBD>ʱ<EFBFBD><CAB1>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
||||
}
|
||||
}
|
||||
else // ulTicksEnd<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/* <20><>ulTicksEnd<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ */
|
||||
else
|
||||
{
|
||||
// DWT_CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/* DWT_CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ */
|
||||
if(DWT_CYCCNT > ulTicksStart)
|
||||
{
|
||||
// <20>ȴ<EFBFBD>DWT_CYCCNT<4E><54>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
while( DWT_CYCCNT > ulTicksEnd );
|
||||
while( DWT_CYCCNT > ulTicksEnd ); // <20>ȴ<EFBFBD>DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>
|
||||
}
|
||||
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>ulTicksEnd
|
||||
while( DWT_CYCCNT < ulTicksEnd );
|
||||
while( DWT_CYCCNT < ulTicksEnd ); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>ulTicksEnd
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD>뼶<EFBFBD><EBBCB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ65535ms
|
||||
* @param usNms: <20><>ʱ<EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @retval None
|
||||
*/
|
||||
void vDelayMs(uint16_t usNms)
|
||||
{
|
||||
for(uint16_t i = 0; i < usNms; i++)
|
||||
{
|
||||
// delay 1 ms
|
||||
vDelayUs(1000);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,19 +9,19 @@
|
||||
#define USE_SYS_TICK 0
|
||||
#define USE_DWT 1
|
||||
|
||||
// 0xE000EDFC DEMCR RW Debug Exception and Monitor Control Register.
|
||||
/* 0xE000EDFC DEMCR RW Debug Exception and Monitor Control Register. */
|
||||
#define DEMCR ( *(__IO uint32_t *)0xE000EDFC )
|
||||
#define TRCENA ( 0x01 << 24) // DEMCR的DWT使能位
|
||||
#define DBGMCU_CR *(__IO uint32_t *)0xE0042004 //MCU调试模块控制寄存器,详细内容参考《stm32中文参考手册》调试支持(DBG)章节,747页
|
||||
#define DBGMCU_CR *(__IO uint32_t *)0xE0042004 // MCU调试模块控制寄存器,详细内容参考《stm32中文参考手册》调试支持(DBG)章节,747页
|
||||
|
||||
// 0xE0001000 DWT_CTRL RW The Debug Watchpoint and Trace (DWT) unit
|
||||
/* 0xE0001000 DWT_CTRL RW The Debug Watchpoint and Trace (DWT) unit */
|
||||
#define DWT_CTRL ( *(__IO uint32_t *)0xE0001000 )
|
||||
#define DWT_CTRL_CYCCNTENA ( 0x01 << 0 ) // DWT的SYCCNT使能位
|
||||
|
||||
// 0xE0001004 DWT_CYCCNT RW Cycle Count register,
|
||||
#define DWT_CYCCNT ( *(__IO uint32_t *)0xE0001004) // 显示或设置处理器的周期计数值
|
||||
/* 0xE0001004 DWT_CYCCNT RW Cycle Count Register */
|
||||
#define DWT_CYCCNT ( *(__IO uint32_t *)0xE0001004 ) // 显示或设置处理器的周期计数值
|
||||
|
||||
//#define DWT_DELAY_mS(mSec) DWT_DELAY_uS(mSec*1000)
|
||||
// #define DWT_DELAY_mS(mSec) DWT_DELAY_uS(mSec*1000)
|
||||
|
||||
typedef struct {
|
||||
uint8_t ucFacUs;
|
||||
|
||||
@@ -12,63 +12,64 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
|
||||
if (xUsartId == USART1)
|
||||
{
|
||||
/* code */
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
|
||||
RCC_APB2PeriphClockCmd(USART1_GPIO_CLOCK, 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_Init(USART1_GPIO_PORT, &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);
|
||||
GPIO_Init(USART1_GPIO_PORT, &GPIO_InitStructure);
|
||||
|
||||
USART_InitTypeDef USART_InitStructure;
|
||||
USART_InitStructure.USART_BaudRate = ulBaudrate; // <20>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD>USART_Init<69><74><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>9600<30><30>Ӧ<EFBFBD>ķ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>BRR<52>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
|
||||
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3>ͽ<EFBFBD><CDBD><EFBFBD>ģʽ
|
||||
USART_InitStructure.USART_Parity = USART_Parity_No; // <20><>У<EFBFBD><D0A3>λ
|
||||
USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ
|
||||
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // <20>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪУ<D2AA>飬<EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ѡ<EFBFBD><D1A1>8λ
|
||||
USART_Init(USART1,&USART_InitStructure);
|
||||
USART_Init(USART1, &USART_InitStructure);
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4>ڵIJ<DAB5>ѯģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>NVIC
|
||||
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); // ʹ<>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // <20><><EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD>4Ϊ4bit<69><74>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0bit<69><74>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0-15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FreeRTOSû<53><C3BB><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>൱<EFBFBD><E0B5B1>4λ<34><CEBB>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0λ<30><CEBB>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
NVIC_InitTypeDef NVIC_InitStructure; // <20><>ʼ<EFBFBD><CABC>NVIC<49><43>USART1ͨ<31><CDA8>
|
||||
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; // <20>ж<EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5; // <20><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>FreeRTOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>ڷ<EFBFBD>Χ<EFBFBD>ڿ<EFBFBD><DABF>Ե<EFBFBD><D4B5><EFBFBD>FreeRTOS<4F><53><EFBFBD>ԡ<EFBFBD>FromISR()<29><><EFBFBD><EFBFBD>β<EFBFBD><CEB2>api<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 6; // <20><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>FreeRTOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>ڷ<EFBFBD>Χ<EFBFBD>ڿ<EFBFBD><DABF>Ե<EFBFBD><D4B5><EFBFBD>FreeRTOS<4F><53><EFBFBD>ԡ<EFBFBD>FromISR()<29><><EFBFBD><EFBFBD>β<EFBFBD><CEB2>api<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // <20><>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
|
||||
NVIC_Init(&NVIC_InitStructure); // ָ<><D6B8>NVIC_InitStructure<72>ĵ<EFBFBD>ַ
|
||||
|
||||
USART_Cmd(USART1,ENABLE);
|
||||
USART_Cmd(USART1, ENABLE);
|
||||
} else if (xUsartId == USART2)
|
||||
{
|
||||
/* code */
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
|
||||
RCC_APB2PeriphClockCmd(USART2_GPIO_CLOCK, 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_Init(USART2_GPIO_PORT, &GPIO_InitStructure);
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
||||
GPIO_InitStructure.GPIO_Pin = USART2_GPIO_PIN_RX;
|
||||
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
||||
GPIO_Init(USART2_GPIO_PORT, &GPIO_InitStructure);
|
||||
|
||||
USART_InitTypeDef USART_InitStructure;
|
||||
USART_InitStructure.USART_BaudRate = ulBaudrate; // <20>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD>USART_Init<69><74><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>9600<30><30>Ӧ<EFBFBD>ķ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>BRR<52>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
|
||||
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3>ͽ<EFBFBD><CDBD><EFBFBD>ģʽ
|
||||
USART_InitStructure.USART_Parity = USART_Parity_No; // <20><>У<EFBFBD><D0A3>λ
|
||||
USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ
|
||||
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // <20>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪУ<D2AA>飬<EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ѡ<EFBFBD><D1A1>8λ
|
||||
USART_Init(USART2,&USART_InitStructure);
|
||||
USART_Init(USART2, &USART_InitStructure);
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4>ڵIJ<DAB5>ѯģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>NVIC
|
||||
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
USART_ITConfig(USART2, USART_IT_IDLE, ENABLE); // ʹ<>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
|
||||
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // <20><><EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD>4Ϊ4bit<69><74>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0bit<69><74>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0-15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FreeRTOSû<53><C3BB><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>൱<EFBFBD><E0B5B1>4λ<34><CEBB>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0λ<30><CEBB>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
NVIC_InitTypeDef NVIC_InitStructure; // <20><>ʼ<EFBFBD><CABC>NVIC<49><43>USART1ͨ<31><CDA8>
|
||||
@@ -82,29 +83,29 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
|
||||
} else if (xUsartId == USART3)
|
||||
{
|
||||
/* code */
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
|
||||
RCC_APB2PeriphClockCmd(USART3_GPIO_CLOCK, 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_Init(USART3_GPIO_PORT, &GPIO_InitStructure);
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
||||
GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_RX;
|
||||
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
||||
GPIO_Init(USART3_GPIO_PORT, &GPIO_InitStructure);
|
||||
|
||||
USART_InitTypeDef USART_InitStructure;
|
||||
USART_InitStructure.USART_BaudRate = ulBaudrate; // <20>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD>USART_Init<69><74><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>9600<30><30>Ӧ<EFBFBD>ķ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>BRR<52>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
|
||||
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3>ͽ<EFBFBD><CDBD><EFBFBD>ģʽ
|
||||
USART_InitStructure.USART_Parity = USART_Parity_No; // <20><>У<EFBFBD><D0A3>λ
|
||||
USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ
|
||||
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // <20>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪУ<D2AA>飬<EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ѡ<EFBFBD><D1A1>8λ
|
||||
USART_Init(USART3,&USART_InitStructure);
|
||||
USART_Init(USART3, &USART_InitStructure);
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4>ڵIJ<DAB5>ѯģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>NVIC
|
||||
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
USART_ITConfig(USART3, USART_IT_IDLE, ENABLE); // ʹ<>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // <20><><EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD>4Ϊ4bit<69><74>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0bit<69><74>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0-15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FreeRTOSû<53><C3BB><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>൱<EFBFBD><E0B5B1>4λ<34><CEBB>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0λ<30><CEBB>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
NVIC_InitTypeDef NVIC_InitStructure; // <20><>ʼ<EFBFBD><CABC>NVIC<49><43>USART1ͨ<31><CDA8>
|
||||
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; // <20>ж<EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
@@ -172,7 +173,7 @@ void vUsartSendString(USART_TypeDef *xUsartId, char *pcString)
|
||||
*/
|
||||
void vUsartPrintf(USART_TypeDef *xUsartId, char *format, ...)
|
||||
{
|
||||
char cBuffer[100];
|
||||
char cBuffer[1024];
|
||||
va_list arg; // arg<72>Ƕ<EFBFBD><C7B6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
|
||||
va_start(arg, format); // <20><>formatλ<74>ÿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>arg<72><67><EFBFBD><EFBFBD>
|
||||
vsprintf(cBuffer, format, arg); // <20><>װ<EFBFBD><D7B0>ʽҪ<CABD><D2AA>vsprintf<74><66><EFBFBD><EFBFBD>Ϊsprintfֻ<66>ܽ<EFBFBD><DCBD><EFBFBD>ֱ<EFBFBD><D6B1>д<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>format<61><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>arg<72><67>
|
||||
@@ -216,20 +217,22 @@ void vUsartPrintf(USART_TypeDef *xUsartId, char *format, ...)
|
||||
*/
|
||||
void USART1_IRQHandler(void)
|
||||
{
|
||||
/* code */
|
||||
#if (USE_RTOS == NONE)
|
||||
|
||||
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 1)
|
||||
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)
|
||||
uint8_t ucRxData = (uint8_t)USART_ReceiveData(USART1);
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
xQueueSendFromISR(xQueueUsart1IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
|
||||
xQueueSendFromISR(xQueueUsart1IrqHdlr, &ucRxData, &xHigherPriorityTaskWoken);
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
#elif (USE_OSAL == 1)
|
||||
#endif
|
||||
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
|
||||
}
|
||||
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 0)
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -240,20 +243,22 @@ void USART1_IRQHandler(void)
|
||||
*/
|
||||
void USART2_IRQHandler(void)
|
||||
{
|
||||
#if (USE_RTOS == NONE && defined __ESP8266_SAMPLE_H__)
|
||||
|
||||
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART2_IRQ == 1)
|
||||
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)
|
||||
uint8_t ucRxData = (uint8_t)USART_ReceiveData(USART2);
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
xQueueSendFromISR(xQueueUsart2IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
|
||||
xQueueSendFromISR(xQueueUsart2IrqHdlr, &ucRxData, &xHigherPriorityTaskWoken);
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
#elif (USE_OSAL == 1)
|
||||
#endif
|
||||
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
|
||||
}
|
||||
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART2_IRQ == 0)
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -264,18 +269,19 @@ void USART2_IRQHandler(void)
|
||||
*/
|
||||
void USART3_IRQHandler(void)
|
||||
{
|
||||
#if (USE_RTOS == NONE)
|
||||
|
||||
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART3_IRQ == 1)
|
||||
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)
|
||||
uint8_t ucRxData = (uint8_t)USART_ReceiveData(USART3);
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
xQueueSendFromISR(xQueueUsart3IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
|
||||
xQueueSendFromISR(xQueueUsart3IrqHdlr, &ucRxData, &xHigherPriorityTaskWoken);
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
#elif (USE_OSAL == 1)
|
||||
#endif
|
||||
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
|
||||
}
|
||||
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART3_IRQ == 0)
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1,12 +1,20 @@
|
||||
#ifndef __USART_H__
|
||||
#define __USART_H__
|
||||
|
||||
#define USE_NONE_SYSTEM 0
|
||||
#define USE_FREERTOS 1
|
||||
#define USE_OSAL 0
|
||||
/* <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>RTOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA><CAB9>RTOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>ϵͳ<CFB5><CDB3>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA>õ<EFBFBD><C3B5><EFBFBD>RTOS<4F><53><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪNONE<4E><45> */
|
||||
#define USE_RTOS FREERTOS
|
||||
#define NONE 0
|
||||
#define FREERTOS 1
|
||||
|
||||
#define vUsart1IrqHandler USART1_IRQHandler
|
||||
#define vEsp8266IrqHandler USART2_IRQHandler
|
||||
#define vLoRaIrqHandler USART3_IRQHandler
|
||||
#define USART1_GPIO_CLOCK RCC_APB2Periph_GPIOA
|
||||
#define USART2_GPIO_CLOCK RCC_APB2Periph_GPIOA
|
||||
#define USART3_GPIO_CLOCK RCC_APB2Periph_GPIOB
|
||||
#define USART1_GPIO_PORT GPIOA
|
||||
#define USART2_GPIO_PORT GPIOA
|
||||
#define USART3_GPIO_PORT GPIOB
|
||||
#define USART1_GPIO_PIN_TX GPIO_Pin_9
|
||||
#define USART1_GPIO_PIN_RX GPIO_Pin_10
|
||||
#define USART2_GPIO_PIN_TX GPIO_Pin_2
|
||||
@@ -14,11 +22,14 @@
|
||||
#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)
|
||||
#if (USE_RTOS == NONE)
|
||||
|
||||
#elif (USE_RTOS == FREERTOS)
|
||||
#include "FreeRTOS.h"
|
||||
#include "queue.h"
|
||||
#elif (USE_OSAL == 1)
|
||||
#define ENABLE_FREERTOS_API_QUEUE_USART1_IRQ 0
|
||||
#define ENABLE_FREERTOS_API_QUEUE_USART2_IRQ 0
|
||||
#define ENABLE_FREERTOS_API_QUEUE_USART3_IRQ 1
|
||||
#endif
|
||||
|
||||
#include "stm32f10x.h" // Device header
|
||||
@@ -26,13 +37,32 @@
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
|
||||
#if (USE_NONE_SYSTEM == 1)
|
||||
#elif (USE_FREERTOS == 1)
|
||||
#if (ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 1)
|
||||
extern QueueHandle_t xQueueUsart1IrqHdlr;
|
||||
extern QueueHandle_t xQueueUsart2IrqHdlr;
|
||||
extern QueueHandle_t xQueueUsart3IrqHdlr;
|
||||
#elif (USE_OSAL == 1)
|
||||
#endif
|
||||
#if (ENABLE_FREERTOS_API_QUEUE_USART2_IRQ == 1)
|
||||
extern QueueHandle_t xQueueUsart2IrqHdlr;
|
||||
#endif
|
||||
#if (ENABLE_FREERTOS_API_QUEUE_USART3_IRQ == 1)
|
||||
extern QueueHandle_t xQueueUsart3IrqHdlr;
|
||||
#endif
|
||||
|
||||
extern volatile uint8_t ucTcpClosedFlag;
|
||||
|
||||
#define BUFFER_MAX_LENGTH 1024 // <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
extern struct SerialFrame_t // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
{
|
||||
char cSerialReceivedBuffer [ BUFFER_MAX_LENGTH ];
|
||||
union
|
||||
{
|
||||
__IO uint16_t usInfoAll;
|
||||
struct
|
||||
{
|
||||
__IO uint16_t usFrameLength :15; // 14:0
|
||||
__IO uint16_t usFrameFinishFlag :1; // 15
|
||||
} Bits_t;
|
||||
};
|
||||
} xSerialFrameRecord;
|
||||
|
||||
void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate);
|
||||
void vUsartSendByte(USART_TypeDef *xUsartId, uint8_t ucByte);
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
#include "semphr.h"
|
||||
#include "LED.h"
|
||||
#include "DHT11.h"
|
||||
// #include "USART3.h"
|
||||
#include "USART.h"
|
||||
#include "LoRa.h"
|
||||
#include "Relay.h"
|
||||
@@ -31,7 +30,12 @@ SemaphoreHandle_t xSemLedOffHdlr;
|
||||
SemaphoreHandle_t xSemFanOnHdlr;
|
||||
SemaphoreHandle_t xSemFanOffHdlr;
|
||||
|
||||
/* <20><>˸LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD>NULL<4C><4C> */
|
||||
/**
|
||||
* @brief LED״ָ̬ʾ<D6B8><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note ͨ<><CDA8>LED<45><44><EFBFBD><EFBFBD>˸״ָ̬ʾϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
|
||||
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δʹ<CEB4>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C>
|
||||
* @retval None
|
||||
*/
|
||||
void vTaskStateLed(void *pvParameters)
|
||||
{
|
||||
while(1)
|
||||
@@ -43,6 +47,12 @@ void vTaskStateLed(void *pvParameters)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief LED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LED<45>Ŀ<EFBFBD><C4BF><EFBFBD>״̬<D7B4><CCAC>
|
||||
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δʹ<CEB4>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C>
|
||||
* @retval None
|
||||
*/
|
||||
void vTaskLedControl(void *pvParameters)
|
||||
{
|
||||
while (1)
|
||||
@@ -61,6 +71,12 @@ void vTaskLedControl(void *pvParameters)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ȵĿ<C8B5><C4BF><EFBFBD>״̬<D7B4><CCAC>
|
||||
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δʹ<CEB4>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C>
|
||||
* @retval None
|
||||
*/
|
||||
void vTaskFanControl(void *pvParameters)
|
||||
{
|
||||
while (1)
|
||||
@@ -77,6 +93,12 @@ void vTaskFanControl(void *pvParameters)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief DHT11<31><31><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD>ڶ<EFBFBD>ȡDHT11<31><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶Ⱥ<C2B6>ʪ<EFBFBD><CAAA><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>͵<EFBFBD><CDB5><EFBFBD>Ӧ<EFBFBD>Ķ<EFBFBD><C4B6>С<EFBFBD>
|
||||
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δʹ<CEB4>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C>
|
||||
* @retval None
|
||||
*/
|
||||
void vTaskDht11(void *pvParameters)
|
||||
{
|
||||
DHT11Data_t xDHT11Data;
|
||||
@@ -107,8 +129,15 @@ void vTaskDht11(void *pvParameters)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief LoRa<52><61><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD>ʪ<EFBFBD>ȶ<EFBFBD><C8B6>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ͨ<EFBFBD><CDA8>LoRaģ<61>鷢<EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ء<EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>źš<C5BA>
|
||||
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δʹ<CEB4>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C>
|
||||
* @retval None
|
||||
*/
|
||||
void vTaskLoRaToGatePkt(void *pvParameters)
|
||||
{
|
||||
char cBuffer[50];
|
||||
uint8_t ucRecTempData = 0, ucRecHumiData = 0;
|
||||
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ճɹ<D5B3> */
|
||||
BaseType_t xRetvalQueueTemp, xRetvalQueueHumi;
|
||||
@@ -130,6 +159,9 @@ void vTaskLoRaToGatePkt(void *pvParameters)
|
||||
/* code */
|
||||
vUsartSendArray(USART3, &ucRecTempData, 1);
|
||||
vUsartSendArray(USART3, &ucRecHumiData, 1);
|
||||
snprintf(cBuffer, sizeof(cBuffer), "Temp=%d, Humi=%d\r\n", ucRecTempData, ucRecHumiData);
|
||||
vUsartSendString(USART1, cBuffer);
|
||||
vTaskDelay(1000);
|
||||
}
|
||||
if (xSemaphoreTake(xSemLedOnHdlr, pdMS_TO_TICKS(10)) == pdTRUE)
|
||||
{
|
||||
@@ -146,6 +178,12 @@ void vTaskLoRaToGatePkt(void *pvParameters)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief LoRa<52><61>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><>USART3<54><33><EFBFBD><EFBFBD>LoRaģ<61>鴫<EFBFBD><E9B4AB><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
|
||||
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δʹ<CEB4>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C>
|
||||
* @retval None
|
||||
*/
|
||||
void vTaskLoRaMsgRec(void *pvParameters)
|
||||
{
|
||||
uint8_t ucDataRecNodeId = 0, ucDataRecExeId = 0, ucDataRecExeSta = 0;
|
||||
@@ -180,10 +218,16 @@ void vTaskLoRaMsgRec(void *pvParameters)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>FreeRTOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vCreateTasksList(void)
|
||||
{
|
||||
// #if defined __LED_H__
|
||||
#if LED_PC13_WORK_MODE == LED_PC13_STM32_STATE_MODE
|
||||
#if LED_PC13_WORK_MODE == STM32_STATE_MODE
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F1A3ACB2><EFBFBD><EFBFBD>ֱ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD><C6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>ջ<EFBFBD><D5BB>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
xTaskCreate(
|
||||
(TaskFunction_t ) vTaskStateLed,
|
||||
@@ -238,6 +282,12 @@ void vCreateTasksList(void)
|
||||
// #endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>FreeRTOS<4F><53><EFBFBD>С<EFBFBD>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vCreateQueuesList(void)
|
||||
{
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ƕ<EFBFBD><C7B6>еij<D0B5><C4B3><EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD><DCB4>Ŷ<EFBFBD><C5B6>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
||||
@@ -255,10 +305,16 @@ void vCreateQueuesList(void)
|
||||
if (xQueueTempHdlr == NULL || xQueueHumiHdlr == NULL || xQueueUsart3IrqHdlr == NULL)
|
||||
{
|
||||
/* code */
|
||||
vUsartPrintf(USART3, "Queue Init Failed.\r\n");
|
||||
vUsartPrintf(USART1, "Queue Init Failed.\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>FreeRTOS<4F>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vCreateSemaphoresList(void)
|
||||
{
|
||||
xSemLedOnHdlr = xSemaphoreCreateBinary();
|
||||
@@ -267,11 +323,18 @@ void vCreateSemaphoresList(void)
|
||||
xSemFanOffHdlr = xSemaphoreCreateBinary();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><>ʼ<EFBFBD><CABC>ϵͳ<CFB5><CDB3>ģ<EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F1A3ACB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
vFanRelayInit();
|
||||
vDelayInit();
|
||||
vPc13LedInit();
|
||||
vUsartInit(USART1, 115200);
|
||||
vUsartInit(USART3, 115200);
|
||||
vCreateQueuesList();
|
||||
vCreateSemaphoresList();
|
||||
|
||||
3
STM32/Gateway_Node/.vscode/settings.json
vendored
3
STM32/Gateway_Node/.vscode/settings.json
vendored
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"stm32f10x.h": "c",
|
||||
"core_cm3.h": "c"
|
||||
"core_cm3.h": "c",
|
||||
"netfifo.h": "c"
|
||||
}
|
||||
}
|
||||
75
STM32/Gateway_Node/Application/App_MQTT/App_MQTT.c
Normal file
75
STM32/Gateway_Node/Application/App_MQTT/App_MQTT.c
Normal file
@@ -0,0 +1,75 @@
|
||||
#include "App_MQTT.h"
|
||||
|
||||
/**
|
||||
* @brief bMqttPublish
|
||||
* @note ͨ<><CDA8>ESP8266ģ<36><C4A3><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param pcTopic<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param pcMessage<67><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @retval true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||
* @retval false<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bMqttPublish(char *pcTopic, char *pcMessage)
|
||||
{
|
||||
char cCmd[256] = {0};
|
||||
uint8_t ucLen = strlen(pcMessage);
|
||||
snprintf(cCmd, sizeof(cCmd), "AT+MQTTPUBRAW=0,\"%s\",%d,1,0", pcTopic, ucLen);
|
||||
return bEsp8266Command(cCmd, "OK", ">", 3000) && bEsp8266Command(pcMessage, "OK", NULL, 3000);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief bMqttSubMsgFormat
|
||||
* @note <20><><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param pcTopic<69><63><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param pcMessage<67><65><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>Ϣ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @retval true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||
* @retval false<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bMqttSubMsgFormat(char *pcTopic, char *pcMessage)
|
||||
{
|
||||
// <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD>ͬ<EFBFBD><CDAC>ģʽ<C4A3><CABD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>Ϣ<EFBFBD><CFA2>ʽ<EFBFBD><CABD><EFBFBD>б<EFBFBD>д
|
||||
char *pcSubRecMsg;
|
||||
pcSubRecMsg = strstr(xSerialFrameRecord.cSerialReceivedBuffer, pcMessage);
|
||||
if (strstr(xSerialFrameRecord.cSerialReceivedBuffer, pcTopic), pcSubRecMsg)
|
||||
{
|
||||
/* code */
|
||||
vUsartPrintf(USART1, "MQTT Subscribe Message Matched: %s\r\n", pcSubRecMsg);
|
||||
return true;
|
||||
}
|
||||
return false; // ռλ<D5BC><CEBB><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief xMqttCmdParse
|
||||
* @note <20><><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param pcTopic<69><63><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @retval eMqttCmd_t<5F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>ֵ
|
||||
*/
|
||||
eMqttCmd_t xMqttCmdParse(char *pcTopic)
|
||||
{
|
||||
if (bMqttSubMsgFormat(pcTopic, "{\"cmd\":{\"led\":\"on\"}}") == true)
|
||||
{
|
||||
return MQTT_CMD_LED_ON;
|
||||
}
|
||||
else if (bMqttSubMsgFormat(pcTopic, "{\"cmd\":{\"led\":\"off\"}}") == true)
|
||||
{
|
||||
return MQTT_CMD_LED_OFF;
|
||||
}
|
||||
else if (bMqttSubMsgFormat(pcTopic, "{\"cmd\":{\"fan\":\"on\"}}") == true)
|
||||
{
|
||||
return MQTT_CMD_FAN_ON;
|
||||
}
|
||||
else if (bMqttSubMsgFormat(pcTopic, "{\"cmd\":{\"fan\":\"off\"}}") == true)
|
||||
{
|
||||
return MQTT_CMD_FAN_OFF;
|
||||
}
|
||||
else if (bMqttSubMsgFormat(pcTopic, "{\"cmd\":{\"humidifier\":\"on\"}}") == true)
|
||||
{
|
||||
return MQTT_CMD_HUMIDIFIER_ON;
|
||||
}
|
||||
else if (bMqttSubMsgFormat(pcTopic, "{\"cmd\":{\"humidifier\":\"off\"}}") == true)
|
||||
{
|
||||
return MQTT_CMD_HUMIDIFIER_OFF;
|
||||
}
|
||||
return MQTT_CMD_UNKNOWN; // δʶ<CEB4><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
33
STM32/Gateway_Node/Application/App_MQTT/App_MQTT.h
Normal file
33
STM32/Gateway_Node/Application/App_MQTT/App_MQTT.h
Normal file
@@ -0,0 +1,33 @@
|
||||
#ifndef __APP_MQTT_H__
|
||||
#define __APP_MQTT_H__
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "ESP8266.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MQTT_MODE_NORMAL = 0,
|
||||
MQTT_MODE_PROPERTY,
|
||||
}eMqttMode_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
/* data */
|
||||
MQTT_CMD_LED_ON = 0,
|
||||
MQTT_CMD_LED_OFF,
|
||||
MQTT_CMD_FAN_ON,
|
||||
MQTT_CMD_FAN_OFF,
|
||||
MQTT_CMD_HUMIDIFIER_ON,
|
||||
MQTT_CMD_HUMIDIFIER_OFF,
|
||||
MQTT_CMD_UNKNOWN = -1,
|
||||
}eMqttCmd_t;
|
||||
|
||||
|
||||
bool bMqttPublish(char *pcTopic, char *pcMessage);
|
||||
bool bMqttSubMsgFormat(char *pcTopic, char *pcMessage);
|
||||
eMqttCmd_t xMqttCmdParse(char *pcTopic);
|
||||
|
||||
#endif /* __APP_MQTT_H__ */
|
||||
80
STM32/Gateway_Node/Application/App_NetFIFO/App_NetFIFO.c
Normal file
80
STM32/Gateway_Node/Application/App_NetFIFO/App_NetFIFO.c
Normal file
@@ -0,0 +1,80 @@
|
||||
#include "App_NetFIFO.h"
|
||||
|
||||
/**
|
||||
* @brief <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param pxBuffer: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
|
||||
* @retval None
|
||||
*/
|
||||
void vNetBufferInit(NetFifoBuffer_t *pxBuffer)
|
||||
{
|
||||
if (pxBuffer == NULL) return;
|
||||
memset(pxBuffer->cNetFifoBuffer, 0, sizeof(pxBuffer->cNetFifoBuffer));
|
||||
pxBuffer->ucBufferIndex = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><EFBFBD><F2BBBAB3><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param pxBuffer: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
|
||||
* @param cData: Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @retval None
|
||||
*/
|
||||
void vNetBufferWrite(NetFifoBuffer_t *pxBuffer, char cData)
|
||||
{
|
||||
if (pxBuffer == NULL) return;
|
||||
if (pxBuffer->ucBufferIndex < sizeof(pxBuffer->cNetFifoBuffer) - 1)
|
||||
{
|
||||
pxBuffer->cNetFifoBuffer[pxBuffer->ucBufferIndex++] = cData;
|
||||
pxBuffer->cNetFifoBuffer[pxBuffer->ucBufferIndex] = '\0'; // ȷ<><C8B7><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ֹ
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||||
* @param pxBuffer: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
|
||||
* @param index: Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @retval <20><>ȡ<EFBFBD><C8A1><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чʱ<D0A7><CAB1><EFBFBD><EFBFBD>'\0'
|
||||
*/
|
||||
char cNetBufferReadByte(NetFifoBuffer_t *pxBuffer, int index)
|
||||
{
|
||||
if (pxBuffer == NULL) return '\0';
|
||||
if (index < 0 || index >= pxBuffer->ucBufferIndex)
|
||||
{
|
||||
return '\0'; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
||||
}
|
||||
return pxBuffer->cNetFifoBuffer[index];
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20>Ƚϻ<C8BD><CFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param pxBuffer: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
|
||||
* @param pcStr: Ҫ<>Ƚϵ<C8BD><CFB5>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @retval true: ƥ<><C6A5><EFBFBD>ɹ<EFBFBD>, false: ƥ<><C6A5>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bNetBufferReadString(NetFifoBuffer_t *pxBuffer, const char *pcStr)
|
||||
{
|
||||
if (pxBuffer == NULL || pcStr == NULL) return false;
|
||||
return (strstr(pxBuffer->cNetFifoBuffer, pcStr) != NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
||||
* @param pxBuffer: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
|
||||
* @retval <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
int iNetBufferGetLength(NetFifoBuffer_t *pxBuffer)
|
||||
{
|
||||
if (pxBuffer == NULL) return 0;
|
||||
return pxBuffer->ucBufferIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param pxBuffer: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
|
||||
* @retval None
|
||||
*/
|
||||
void vNetBufferClear(NetFifoBuffer_t *pxBuffer)
|
||||
{
|
||||
if (pxBuffer == NULL) return;
|
||||
memset(pxBuffer->cNetFifoBuffer, 0, sizeof(pxBuffer->cNetFifoBuffer));
|
||||
pxBuffer->ucBufferIndex = 0;
|
||||
}
|
||||
23
STM32/Gateway_Node/Application/App_NetFIFO/App_NetFIFO.h
Normal file
23
STM32/Gateway_Node/Application/App_NetFIFO/App_NetFIFO.h
Normal file
@@ -0,0 +1,23 @@
|
||||
#ifndef __NETFIFO_H__
|
||||
#define __NETFIFO_H__ 1
|
||||
|
||||
#include "stm32f10x.h"
|
||||
#include "stdio.h"
|
||||
#include "string.h"
|
||||
#include "stdbool.h"
|
||||
#include "stdlib.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char cNetFifoBuffer[1024];
|
||||
uint8_t ucBufferIndex;
|
||||
}NetFifoBuffer_t;
|
||||
|
||||
void vNetBufferInit(NetFifoBuffer_t *pxBuffer);
|
||||
void vNetBufferWrite(NetFifoBuffer_t *pxBuffer, char cData);
|
||||
char cNetBufferReadByte(NetFifoBuffer_t *pxBuffer, int index);
|
||||
bool bNetBufferReadString(NetFifoBuffer_t *pxBuffer, const char *pcStr);
|
||||
int iNetBufferGetLength(NetFifoBuffer_t *pxBuffer);
|
||||
void vNetBufferClear(NetFifoBuffer_t *pxBuffer);
|
||||
|
||||
#endif
|
||||
135
STM32/Gateway_Node/BSP/Delay.c
Normal file
135
STM32/Gateway_Node/BSP/Delay.c
Normal file
@@ -0,0 +1,135 @@
|
||||
#include "Delay.h"
|
||||
|
||||
#if MODE == USE_SYS_TICK
|
||||
|
||||
/**
|
||||
* @brief <20><>ʼ<EFBFBD><CABC><EFBFBD>ӳٺ<D3B3><D9BA><EFBFBD>
|
||||
* @note <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>SYSTICK<43><4B>ʱ<EFBFBD>ӹ̶<D3B9>ΪAHBʱ<42>ӵ<EFBFBD>1/8<><38>SYSCLK:ϵͳʱ<CDB3><CAB1>Ƶ<EFBFBD><C6B5>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vDelayInit(void)
|
||||
{
|
||||
uint8_t ucSYSCLK;
|
||||
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
|
||||
xUcFacInit.ucFacUs=ucSYSCLK/8;
|
||||
xUcFacInit.usFacMs=(uint16_t)xUcFacInit.ucFacUs*1000;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <>뼶<EFBFBD><EBBCB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ16777215us
|
||||
* @param ulNus: <20><>ʱ<EFBFBD><CAB1><EFBFBD><CEA2><EFBFBD><EFBFBD>
|
||||
* @retval None
|
||||
*/
|
||||
void vDelayUs(uint32_t ulNus)
|
||||
{
|
||||
uint32_t ulTemp;
|
||||
SysTick->LOAD=ulNus*xUcFacInit.ucFacUs; // ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->VAL=0x00; // <20><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
do
|
||||
{
|
||||
ulTemp=SysTick->CTRL;
|
||||
} while((ulTemp&0x01)&&!(ulTemp&(1<<16))); // <20>ȴ<EFBFBD>ʱ<EFBFBD>䵽<EFBFBD><E4B5BD>
|
||||
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; // <20>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->VAL =0x00; // <20><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD>뼶<EFBFBD><EBBCB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD>Systick<63><6B>ʱ<EFBFBD><CAB1>Ϊ24λ<34><CEBB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ֵΪ0xFFFFFF<46><46>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>16777215<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>0xFFFFFF<46><46><EFBFBD><EFBFBD>ʵ<EFBFBD>ʼ<EFBFBD><CABC>ص<EFBFBD>ֵ<EFBFBD><D6B5>ȡģ<C8A1><C4A3><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD><EFBFBD>̡<EFBFBD>
|
||||
* <20><><EFBFBD>Գ<EFBFBD><D4B3><EFBFBD>1.864s<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ᵼ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>ʱΪxms-16777215<31>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD>º<EFBFBD><C2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>ʱ<EFBFBD>Ƿ<C7B7><F1B3ACB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳɶ<D6B3><C9B6><EFBFBD>1000ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vDelayMs(uint16_t usNms)
|
||||
{
|
||||
uint32_t ulTemp;
|
||||
while (usNms)
|
||||
{
|
||||
uint16_t current = (usNms > 1000) ? 1000 : usNms;
|
||||
usNms -= current;
|
||||
|
||||
SysTick->LOAD = (uint32_t)current * xUcFacInit.usFacMs;
|
||||
SysTick->VAL = 0x00;
|
||||
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
|
||||
do
|
||||
{
|
||||
ulTemp = SysTick->CTRL;
|
||||
} while ((ulTemp & 0x01) && !(ulTemp & (1 << 16)));
|
||||
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
|
||||
SysTick->VAL = 0x00;
|
||||
}
|
||||
}
|
||||
|
||||
#elif MODE == USE_DWT
|
||||
|
||||
/**
|
||||
* @brief DWT<57><54>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
* @note DWT<57><54>ʱ<EFBFBD><CAB1><EFBFBD>ȸߣ<C8B8><DFA3>ʺ϶<CABA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vDelayInit(void)
|
||||
{
|
||||
DEMCR |= (uint32_t)TRCENA; // ʹ<><CAB9>DWT<57><54><EFBFBD><EFBFBD>
|
||||
DWT_CYCCNT = (uint32_t)0u; // CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DWT_CTRL |= (uint32_t)DWT_CTRL_CYCCNTENA; // ʹ<><CAB9>CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <>뼶<EFBFBD><EBBCB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ10000us
|
||||
* @param ulNus: <20><>ʱ<EFBFBD><CAB1><EFBFBD><CEA2><EFBFBD><EFBFBD>
|
||||
* @retval None
|
||||
*/
|
||||
void vDelayUs(uint32_t ulNus)
|
||||
{
|
||||
if(ulNus > 10000) ulNus = 10000;
|
||||
uint32_t ulTicksStart, ulTicksEnd, ulTicksDelay;
|
||||
ulTicksStart = DWT_CYCCNT;
|
||||
ulTicksDelay = ( ulNus * ( SystemCoreClock / (1000000) ) ); // <20><><EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵδ<C9B5><CEB4><EFBFBD>
|
||||
ulTicksEnd = ulTicksStart + ulTicksDelay;
|
||||
/* <20><>ulTicksEndû<64><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ */
|
||||
if ( ulTicksEnd >= ulTicksStart )
|
||||
{
|
||||
if(DWT_CYCCNT > ulTicksStart) // DWT_CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
while( DWT_CYCCNT < ulTicksEnd );
|
||||
}
|
||||
/* DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>ʱ */
|
||||
else
|
||||
{
|
||||
return; // <20>Ѿ<EFBFBD><D1BE><EFBFBD>ʱ<EFBFBD><CAB1>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
||||
}
|
||||
}
|
||||
/* <20><>ulTicksEnd<6E><64><EFBFBD><EFBFBD>ʱ */
|
||||
else
|
||||
{
|
||||
/* DWT_CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ */
|
||||
if(DWT_CYCCNT > ulTicksStart)
|
||||
{
|
||||
while( DWT_CYCCNT > ulTicksEnd ); // <20>ȴ<EFBFBD>DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>
|
||||
}
|
||||
while( DWT_CYCCNT < ulTicksEnd ); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>ulTicksEnd
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD>뼶<EFBFBD><EBBCB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ65535ms
|
||||
* @param usNms: <20><>ʱ<EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @retval None
|
||||
*/
|
||||
void vDelayMs(uint16_t usNms)
|
||||
{
|
||||
for(uint16_t i = 0; i < usNms; i++)
|
||||
{
|
||||
vDelayUs(1000);
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
#endif
|
||||
@@ -9,19 +9,19 @@
|
||||
#define USE_SYS_TICK 0
|
||||
#define USE_DWT 1
|
||||
|
||||
// 0xE000EDFC DEMCR RW Debug Exception and Monitor Control Register.
|
||||
/* 0xE000EDFC DEMCR RW Debug Exception and Monitor Control Register. */
|
||||
#define DEMCR ( *(__IO uint32_t *)0xE000EDFC )
|
||||
#define TRCENA ( 0x01 << 24) // DEMCR的DWT使能位
|
||||
#define DBGMCU_CR *(__IO uint32_t *)0xE0042004 //MCU调试模块控制寄存器,详细内容参考《stm32中文参考手册》调试支持(DBG)章节,747页
|
||||
#define DBGMCU_CR *(__IO uint32_t *)0xE0042004 // MCU调试模块控制寄存器,详细内容参考《stm32中文参考手册》调试支持(DBG)章节,747页
|
||||
|
||||
// 0xE0001000 DWT_CTRL RW The Debug Watchpoint and Trace (DWT) unit
|
||||
/* 0xE0001000 DWT_CTRL RW The Debug Watchpoint and Trace (DWT) unit */
|
||||
#define DWT_CTRL ( *(__IO uint32_t *)0xE0001000 )
|
||||
#define DWT_CTRL_CYCCNTENA ( 0x01 << 0 ) // DWT的SYCCNT使能位
|
||||
|
||||
// 0xE0001004 DWT_CYCCNT RW Cycle Count register,
|
||||
#define DWT_CYCCNT ( *(__IO uint32_t *)0xE0001004) // 显示或设置处理器的周期计数值
|
||||
/* 0xE0001004 DWT_CYCCNT RW Cycle Count Register */
|
||||
#define DWT_CYCCNT ( *(__IO uint32_t *)0xE0001004 ) // 显示或设置处理器的周期计数值
|
||||
|
||||
//#define DWT_DELAY_mS(mSec) DWT_DELAY_uS(mSec*1000)
|
||||
// #define DWT_DELAY_mS(mSec) DWT_DELAY_uS(mSec*1000)
|
||||
|
||||
typedef struct {
|
||||
uint8_t ucFacUs;
|
||||
@@ -12,63 +12,64 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
|
||||
if (xUsartId == USART1)
|
||||
{
|
||||
/* code */
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
|
||||
RCC_APB2PeriphClockCmd(USART1_GPIO_CLOCK, 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_Init(USART1_GPIO_PORT, &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);
|
||||
GPIO_Init(USART1_GPIO_PORT, &GPIO_InitStructure);
|
||||
|
||||
USART_InitTypeDef USART_InitStructure;
|
||||
USART_InitStructure.USART_BaudRate = ulBaudrate; // 设定后,USART_Init函数内部会自动算好9600对应的分频系数,并写到BRR寄存器
|
||||
RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
|
||||
RCC_APB2PeriphClockCmd(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);
|
||||
USART_Init(USART1, &USART_InitStructure);
|
||||
// 上面是串口的查询模式,如果使用中断,还需要开启中断,配置NVIC
|
||||
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); // 选择RXNE的中断,并开启RXNE标志位到NVIC的输出,如果RXNE标志位置1,就会向NVIC申请中断,之后可以在中断函数中接收数据
|
||||
|
||||
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // 选择RXNE的中断,并开启RXNE标志位到NVIC的输出,如果RXNE标志位置1,就会向NVIC申请中断,之后可以在中断函数中接收数据
|
||||
USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); // 使能串口总线空闲中断
|
||||
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // 分组,分组4为4bit抢占优先级和0bit响应优先级,抢占优先级可设置为0-15。由于FreeRTOS没有响应优先级,而优先级分组4相当于4位抢占优先级和0位响应优先级。
|
||||
NVIC_InitTypeDef NVIC_InitStructure; // 初始化NVIC的USART1通道
|
||||
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; // 中断通道
|
||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5; // 抢占优先级配置,根据FreeRTOS设置配置,在范围内可以调用FreeRTOS的以“FromISR()”结尾的api函数。
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 6; // 抢占优先级配置,根据FreeRTOS设置配置,在范围内可以调用FreeRTOS的以“FromISR()”结尾的api函数。
|
||||
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 响应优先级配置,用不上了
|
||||
NVIC_Init(&NVIC_InitStructure); // 指向NVIC_InitStructure的地址
|
||||
|
||||
USART_Cmd(USART1,ENABLE);
|
||||
USART_Cmd(USART1, ENABLE);
|
||||
} else if (xUsartId == USART2)
|
||||
{
|
||||
/* code */
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
|
||||
RCC_APB2PeriphClockCmd(USART2_GPIO_CLOCK, 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_Init(USART2_GPIO_PORT, &GPIO_InitStructure);
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
||||
GPIO_InitStructure.GPIO_Pin = USART2_GPIO_PIN_RX;
|
||||
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
||||
GPIO_Init(USART2_GPIO_PORT, &GPIO_InitStructure);
|
||||
|
||||
USART_InitTypeDef USART_InitStructure;
|
||||
USART_InitStructure.USART_BaudRate = ulBaudrate; // 设定后,USART_Init函数内部会自动算好9600对应的分频系数,并写到BRR寄存器
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
|
||||
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);
|
||||
USART_Init(USART2, &USART_InitStructure);
|
||||
// 上面是串口的查询模式,如果使用中断,还需要开启中断,配置NVIC
|
||||
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); // 选择RXNE的中断,并开启RXNE标志位到NVIC的输出,如果RXNE标志位置1,就会向NVIC申请中断,之后可以在中断函数中接收数据
|
||||
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); // 选择RXNE的中断,并开启RXNE标志位到NVIC的输出,如果RXNE标志位置1,就会向NVIC申请中断,之后可以在中断函数中接收数据
|
||||
USART_ITConfig(USART2, USART_IT_IDLE, ENABLE); // 使能串口总线空闲中断
|
||||
|
||||
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // 分组,分组4为4bit抢占优先级和0bit响应优先级,抢占优先级可设置为0-15。由于FreeRTOS没有响应优先级,而优先级分组4相当于4位抢占优先级和0位响应优先级。
|
||||
NVIC_InitTypeDef NVIC_InitStructure; // 初始化NVIC的USART1通道
|
||||
@@ -82,29 +83,29 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
|
||||
} else if (xUsartId == USART3)
|
||||
{
|
||||
/* code */
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
|
||||
RCC_APB2PeriphClockCmd(USART3_GPIO_CLOCK, 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_Init(USART3_GPIO_PORT, &GPIO_InitStructure);
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
||||
GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_RX;
|
||||
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
||||
GPIO_Init(USART3_GPIO_PORT, &GPIO_InitStructure);
|
||||
|
||||
USART_InitTypeDef USART_InitStructure;
|
||||
USART_InitStructure.USART_BaudRate = ulBaudrate; // 设定后,USART_Init函数内部会自动算好9600对应的分频系数,并写到BRR寄存器
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
|
||||
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);
|
||||
USART_Init(USART3, &USART_InitStructure);
|
||||
// 上面是串口的查询模式,如果使用中断,还需要开启中断,配置NVIC
|
||||
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); // 选择RXNE的中断,并开启RXNE标志位到NVIC的输出,如果RXNE标志位置1,就会向NVIC申请中断,之后可以在中断函数中接收数据
|
||||
|
||||
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); // 选择RXNE的中断,并开启RXNE标志位到NVIC的输出,如果RXNE标志位置1,就会向NVIC申请中断,之后可以在中断函数中接收数据
|
||||
USART_ITConfig(USART3, USART_IT_IDLE, ENABLE); // 使能串口总线空闲中断
|
||||
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // 分组,分组4为4bit抢占优先级和0bit响应优先级,抢占优先级可设置为0-15。由于FreeRTOS没有响应优先级,而优先级分组4相当于4位抢占优先级和0位响应优先级。
|
||||
NVIC_InitTypeDef NVIC_InitStructure; // 初始化NVIC的USART1通道
|
||||
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; // 中断通道
|
||||
@@ -172,7 +173,7 @@ void vUsartSendString(USART_TypeDef *xUsartId, char *pcString)
|
||||
*/
|
||||
void vUsartPrintf(USART_TypeDef *xUsartId, char *format, ...)
|
||||
{
|
||||
char cBuffer[100];
|
||||
char cBuffer[1024];
|
||||
va_list arg; // arg是定义一个参数列表变量
|
||||
va_start(arg, format); // 从format位置开始接收参数表,放在arg里面
|
||||
vsprintf(cBuffer, format, arg); // 封装格式要用vsprintf,因为sprintf只能接收直接写的参数;打印字符串格式是format,参数表是arg,
|
||||
@@ -216,20 +217,32 @@ void vUsartPrintf(USART_TypeDef *xUsartId, char *format, ...)
|
||||
*/
|
||||
void USART1_IRQHandler(void)
|
||||
{
|
||||
/* code */
|
||||
#if (USE_RTOS == NONE)
|
||||
uint8_t ucRxData;
|
||||
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
|
||||
{
|
||||
ucRxData = USART_ReceiveData(USART1);
|
||||
USART_SendData(USART1, ucRxData);
|
||||
}
|
||||
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 1)
|
||||
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)
|
||||
uint8_t ucRxData = (uint8_t)USART_ReceiveData(USART1);
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
xQueueSendFromISR(xQueueUsart1IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
|
||||
xQueueSendFromISR(xQueueUsart1IrqHdlr, &ucRxData, &xHigherPriorityTaskWoken);
|
||||
/* 问题根源:请求上下文切换 */
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
#elif (USE_OSAL == 1)
|
||||
#endif
|
||||
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
|
||||
}
|
||||
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 0)
|
||||
// uint8_t ucRxData;
|
||||
// if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
|
||||
// {
|
||||
// ucRxData = USART_ReceiveData(USART1);
|
||||
// USART_SendData(USART1, ucRxData);
|
||||
// }
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -240,20 +253,47 @@ void USART1_IRQHandler(void)
|
||||
*/
|
||||
void USART2_IRQHandler(void)
|
||||
{
|
||||
#if (USE_RTOS == NONE && defined __ESP8266_SAMPLE_H__)
|
||||
uint8_t ucRxData;
|
||||
if ( USART_GetITStatus ( USART2, USART_IT_RXNE ) != RESET )
|
||||
{
|
||||
ucRxData = USART_ReceiveData( USART2 );
|
||||
if ( xSerialFrameRecord.Bits_t.usFrameLength < ( BUFFER_MAX_LENGTH - 1 ) ) // 预留1个字节写结束符
|
||||
xSerialFrameRecord.cSerialReceivedBuffer [ xSerialFrameRecord.Bits_t.usFrameLength ++ ] = ucRxData;
|
||||
}
|
||||
if ( USART_GetITStatus( USART2, USART_IT_IDLE ) == SET ) // 数据帧接收完毕
|
||||
{
|
||||
xSerialFrameRecord.Bits_t.usFrameFinishFlag = 1;
|
||||
ucRxData = USART_ReceiveData( USART2 ); // 由软件序列清除中断标志位(先读USART_SR,然后读USART_DR)
|
||||
ucTcpClosedFlag = strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "CLOSED\r\n" ) ? 1 : 0;
|
||||
}
|
||||
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART2_IRQ == 1)
|
||||
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)
|
||||
uint8_t ucRxData = (uint8_t)USART_ReceiveData(USART2);
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
xQueueSendFromISR(xQueueUsart2IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
|
||||
xQueueSendFromISR(xQueueUsart2IrqHdlr, &ucRxData, &xHigherPriorityTaskWoken);
|
||||
/* 问题根源:请求上下文切换 */
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
#elif (USE_OSAL == 1)
|
||||
#endif
|
||||
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
|
||||
}
|
||||
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART2_IRQ == 0)
|
||||
uint8_t ucRxData;
|
||||
if ( USART_GetITStatus ( USART2, USART_IT_RXNE ) != RESET )
|
||||
{
|
||||
ucRxData = USART_ReceiveData( USART2 );
|
||||
if ( xSerialFrameRecord.Bits_t.usFrameLength < ( BUFFER_MAX_LENGTH - 1 ) ) // 预留1个字节写结束符
|
||||
xSerialFrameRecord.cSerialReceivedBuffer [ xSerialFrameRecord.Bits_t.usFrameLength ++ ] = ucRxData;
|
||||
}
|
||||
if ( USART_GetITStatus( USART2, USART_IT_IDLE ) == SET ) //数据帧接收完毕
|
||||
{
|
||||
xSerialFrameRecord.Bits_t.usFrameFinishFlag = 1;
|
||||
ucRxData = USART_ReceiveData( USART2 ); // 由软件序列清除中断标志位(先读USART_SR,然后读USART_DR)
|
||||
ucTcpClosedFlag = strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "CLOSED\r\n" ) ? 1 : 0;
|
||||
}
|
||||
USART_SendData(USART1, ucRxData);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -264,18 +304,19 @@ void USART2_IRQHandler(void)
|
||||
*/
|
||||
void USART3_IRQHandler(void)
|
||||
{
|
||||
#if (USE_RTOS == NONE)
|
||||
|
||||
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART3_IRQ == 1)
|
||||
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)
|
||||
uint8_t ucRxData = (uint8_t)USART_ReceiveData(USART3);
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
xQueueSendFromISR(xQueueUsart3IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
|
||||
xQueueSendFromISR(xQueueUsart3IrqHdlr, &ucRxData, &xHigherPriorityTaskWoken);
|
||||
/* 问题根源:请求上下文切换 */
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
#elif (USE_OSAL == 1)
|
||||
#endif
|
||||
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
|
||||
}
|
||||
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART3_IRQ == 0)
|
||||
|
||||
#endif
|
||||
}
|
||||
73
STM32/Gateway_Node/BSP/USART.h
Normal file
73
STM32/Gateway_Node/BSP/USART.h
Normal file
@@ -0,0 +1,73 @@
|
||||
#ifndef __USART_H__
|
||||
#define __USART_H__
|
||||
|
||||
/* <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>RTOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA><CAB9>RTOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>ϵͳ<CFB5><CDB3>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA>õ<EFBFBD><C3B5><EFBFBD>RTOS<4F><53><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪNONE<4E><45> */
|
||||
#define USE_RTOS FREERTOS
|
||||
#define NONE 0
|
||||
#define FREERTOS 1
|
||||
|
||||
#define vUsart1IrqHandler USART1_IRQHandler
|
||||
#define vEsp8266IrqHandler USART2_IRQHandler
|
||||
#define vLoRaIrqHandler USART3_IRQHandler
|
||||
#define USART1_GPIO_CLOCK RCC_APB2Periph_GPIOA
|
||||
#define USART2_GPIO_CLOCK RCC_APB2Periph_GPIOA
|
||||
#define USART3_GPIO_CLOCK RCC_APB2Periph_GPIOB
|
||||
#define USART1_GPIO_PORT GPIOA
|
||||
#define USART2_GPIO_PORT GPIOA
|
||||
#define USART3_GPIO_PORT GPIOB
|
||||
#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_RTOS == NONE)
|
||||
|
||||
#elif (USE_RTOS == FREERTOS)
|
||||
#include "FreeRTOS.h"
|
||||
#include "queue.h"
|
||||
#define ENABLE_FREERTOS_API_QUEUE_USART1_IRQ 0
|
||||
#define ENABLE_FREERTOS_API_QUEUE_USART2_IRQ 0
|
||||
#define ENABLE_FREERTOS_API_QUEUE_USART3_IRQ 1
|
||||
#endif
|
||||
|
||||
#include "stm32f10x.h" // Device header
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
|
||||
#if (ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 1)
|
||||
extern QueueHandle_t xQueueUsart1IrqHdlr;
|
||||
#endif
|
||||
#if (ENABLE_FREERTOS_API_QUEUE_USART2_IRQ == 1)
|
||||
extern QueueHandle_t xQueueUsart2IrqHdlr;
|
||||
#endif
|
||||
#if (ENABLE_FREERTOS_API_QUEUE_USART3_IRQ == 1)
|
||||
extern QueueHandle_t xQueueUsart3IrqHdlr;
|
||||
#endif
|
||||
|
||||
extern volatile uint8_t ucTcpClosedFlag;
|
||||
|
||||
#define BUFFER_MAX_LENGTH 1024 // <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
extern struct SerialFrame_t // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
{
|
||||
char cSerialReceivedBuffer [ BUFFER_MAX_LENGTH ];
|
||||
union
|
||||
{
|
||||
__IO uint16_t usInfoAll;
|
||||
struct
|
||||
{
|
||||
__IO uint16_t usFrameLength :15; // 14:0
|
||||
__IO uint16_t usFrameFinishFlag :1; // 15
|
||||
} Bits_t;
|
||||
};
|
||||
} xSerialFrameRecord;
|
||||
|
||||
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
|
||||
@@ -1 +1,430 @@
|
||||
#include "ESP8266.h"
|
||||
#include "esp8266.h"
|
||||
|
||||
volatile uint8_t ucTcpClosedFlag = 0;
|
||||
char cStr [ 1500 ] = { 0 };
|
||||
struct SerialFrame_t xSerialFrameRecord = { 0 };
|
||||
|
||||
/**
|
||||
* @brief vEsp8266GpioConfig
|
||||
* @note ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>vEsp8266Init<69><74><EFBFBD>á<EFBFBD>
|
||||
* @param <20><>
|
||||
* @retval <20><>
|
||||
*/
|
||||
void vEsp8266GpioConfig ( void )
|
||||
{
|
||||
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>GPIO_InitTypeDef<65><66><EFBFBD>͵Ľṹ<C4BD><E1B9B9> */
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
/* <20><><EFBFBD><EFBFBD> CH_PD <20><><EFBFBD><EFBFBD>*/
|
||||
RCC_APB2PeriphClockCmd ( macESP8266_CH_PD_CLK, ENABLE );
|
||||
GPIO_InitStructure.GPIO_Pin = macESP8266_CH_PD_PIN;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_Init ( macESP8266_CH_PD_PORT, & GPIO_InitStructure );
|
||||
/* <20><><EFBFBD><EFBFBD> RST <20><><EFBFBD><EFBFBD>*/
|
||||
RCC_APB2PeriphClockCmd ( macESP8266_RST_CLK, ENABLE );
|
||||
GPIO_InitStructure.GPIO_Pin = macESP8266_RST_PIN;
|
||||
GPIO_Init ( macESP8266_RST_PORT, & GPIO_InitStructure );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief vEsp8266Rst
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ESP8266ģ<36>飬<EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>vEsp8266AtTest<73><74><EFBFBD>á<EFBFBD>
|
||||
* @param <20><>
|
||||
* @retval <20><>
|
||||
*/
|
||||
void vEsp8266Rst ( void )
|
||||
{
|
||||
#if 0
|
||||
bEsp8266Command ( "AT+RST", "OK", "ready", 2500 );
|
||||
#else
|
||||
macESP8266_RST_LOW_LEVEL();
|
||||
vDelayMs ( 500 );
|
||||
macESP8266_RST_HIGH_LEVEL();
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief bEsp8266Command
|
||||
* @note <20><>ESP8266ģ<36>鷢<EFBFBD><E9B7A2>ATָ<54><D6B8>,<2C><><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param pcCmd<6D><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* @param pcReply1<79><31>pcReply2<79><32><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ΪNULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><DFBC><EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
* @param ulWaittime<6D><65><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>Ӧ<EFBFBD><D3A6>ʱ<EFBFBD><CAB1>
|
||||
* @retval true<75><65>ָ<EFBFBD><EFBFBD>ͳɹ<CDB3>
|
||||
* @retval false<73><65>ָ<EFBFBD><EFBFBD><EEB7A2>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bEsp8266Command ( char * pcCmd, char * pcAck1, char * pcAck2, uint32_t ulWaittime )
|
||||
{
|
||||
xSerialFrameRecord.Bits_t.usFrameLength = 0; //<2F><><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
||||
vUsartPrintf ( USART2, "%s\r\n", pcCmd );
|
||||
if ( ( pcAck1 == 0 ) && ( pcAck2 == 0 ) ) //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return true;
|
||||
vDelayMs( ulWaittime ); //<2F><>ʱ
|
||||
xSerialFrameRecord.cSerialReceivedBuffer [ xSerialFrameRecord.Bits_t.usFrameLength ] = '\0';
|
||||
if ( ( pcAck1 != 0 ) && ( pcAck2 != 0 ) )
|
||||
return ( ( bool ) strstr ( xSerialFrameRecord.cSerialReceivedBuffer, pcAck1 ) ||
|
||||
( bool ) strstr ( xSerialFrameRecord.cSerialReceivedBuffer, pcAck2 ) );
|
||||
else if ( pcAck1 != 0 )
|
||||
return ( ( bool ) strstr ( xSerialFrameRecord.cSerialReceivedBuffer, pcAck1 ) );
|
||||
else
|
||||
return ( ( bool ) strstr ( xSerialFrameRecord.cSerialReceivedBuffer, pcAck2 ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief vEsp8266AtTest
|
||||
* @note <20><>ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AT<41><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param <20><>
|
||||
* @retval <20><>
|
||||
*/
|
||||
void vEsp8266AtTest ( void )
|
||||
{
|
||||
char count=0;
|
||||
macESP8266_RST_HIGH_LEVEL();
|
||||
vDelayMs( 1000 );
|
||||
while ( count < 3 )
|
||||
{
|
||||
if( bEsp8266Command ( "AT", "OK", NULL, 500 ) != true )
|
||||
return;
|
||||
vEsp8266Rst();
|
||||
++ count;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief bEsp8266NetModeChoose
|
||||
* @note ѡ<><D1A1>ESP8266ģ<36><C4A3><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>ģʽ,<2C>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param xMode<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
* @retval 1<><31>ѡ<EFBFBD><D1A1><EFBFBD>ɹ<EFBFBD>
|
||||
* @retval 0<><30>ѡ<EFBFBD><D1A1>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bEsp8266NetModeChoose ( eNetMode_t xMode )
|
||||
{
|
||||
switch ( xMode )
|
||||
{
|
||||
case STA:
|
||||
return bEsp8266Command ( "AT+CWMODE=1", "OK", "no change", 2500 );
|
||||
case AP:
|
||||
return bEsp8266Command ( "AT+CWMODE=2", "OK", "no change", 2500 );
|
||||
case STA_AP:
|
||||
return bEsp8266Command ( "AT+CWMODE=3", "OK", "no change", 2500 );
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief bEsp8266JoinAp
|
||||
* @note ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿWiFi<46><69><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param pcSsid<69><64>WiFi<46><69><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param pcPassWord<72><64>WiFi<46><69><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD>ӳɹ<D3B3>
|
||||
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bEsp8266JoinAp ( char * pcSsid, char * pcPassWord )
|
||||
{
|
||||
char cCmd [128];
|
||||
sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", pcSsid, pcPassWord );
|
||||
if (strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "WIFI CONNECTED" ) != NULL)
|
||||
{
|
||||
/* code */
|
||||
return true;
|
||||
}
|
||||
return bEsp8266Command ( cCmd, "OK", "WIFI CONNECTED", 8000 );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief bEsp8266MqttInit
|
||||
* @note ESP8266ģ<36><C4A3>MQTT<54><54>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param pcMqttUserName<6D><65>MQTT<54>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param pcMqttPassword<72><64>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param pcMqttClientId<49><64>MQTT<54>ͻ<EFBFBD><CDBB><EFBFBD>ID<49>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param pcMqttServerIp<49><70>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param usMqttServerPort<72><74>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF>
|
||||
* @retval 1<><31><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
* @retval 0<><30><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bEsp8266MqttInit ( char * pcMqttUserName, char * pcMqttPassword, char * pcMqttClientId,
|
||||
char * pcMqttServerIp, uint16_t usMqttServerPort,
|
||||
char * pcMqttSubscribeTopic )
|
||||
{
|
||||
char cCmd[256] = {0};
|
||||
|
||||
/* 1. <20><><EFBFBD><EFBFBD>MQTT<54>û<EFBFBD><C3BB><EFBFBD>Ϣ */
|
||||
snprintf(cCmd, sizeof(cCmd), "AT+MQTTUSERCFG=0,1,\"NULL\",\"%s\",\"%s\",0,0,\"\"",
|
||||
pcMqttUserName, pcMqttPassword);
|
||||
if (bEsp8266Command(cCmd, "OK", NULL, 2000) != true)
|
||||
return false;
|
||||
|
||||
/* 2. <20><><EFBFBD>ÿͻ<C3BF><CDBB><EFBFBD>ID */
|
||||
memset(cCmd, 0, sizeof(cCmd));
|
||||
snprintf(cCmd, sizeof(cCmd), "AT+MQTTCLIENTID=0,\"%s\"", pcMqttClientId);
|
||||
if (bEsp8266Command(cCmd, "OK", NULL, 2000) != true)
|
||||
return false;
|
||||
|
||||
/* 3. <20><><EFBFBD>ӵ<EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
memset(cCmd, 0, sizeof(cCmd));
|
||||
snprintf(cCmd, sizeof(cCmd), "AT+MQTTCONN=0,\"%s\",%u,1",
|
||||
pcMqttServerIp, usMqttServerPort);
|
||||
if (bEsp8266Command(cCmd, "OK", NULL, 8000) != true && bEsp8266Command(cCmd, "+MQTTCONN", NULL, 8000) != true)
|
||||
return false;
|
||||
|
||||
/* 4. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
memset(cCmd, 0, sizeof(cCmd));
|
||||
snprintf(cCmd, sizeof(cCmd), "AT+MQTTSUB=0,\"%s\",1", pcMqttSubscribeTopic);
|
||||
if (bEsp8266Command(cCmd, "OK", NULL, 2000) != true)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief bEsp8266BuildAp
|
||||
* @note ESP8266ģ<36>鴴<EFBFBD><E9B4B4>AP<41>ȵ㣬<C8B5>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param pcSsid<69><64>AP<41><50><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param pcPassWord<72><64>AP<41><50><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param xPsdMode<64><65>AP<41><50><EFBFBD>ܷ<EFBFBD>ʽ
|
||||
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bEsp8266BuildAp ( char * pcSsid, char * pcPassWord, eApPsdMode_t xPsdMode )
|
||||
{
|
||||
char cCmd [128];
|
||||
sprintf ( cCmd, "AT+CWSAP=\"%s\",\"%s\",1,%d", pcSsid, pcPassWord, xPsdMode );
|
||||
return bEsp8266Command ( cCmd, "OK", 0, 1000 );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief bEsp8266EnableMultipleId
|
||||
* @note ESP8266ģ<36><C4A3>ʹ<EFBFBD><CAB9>/<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param xEnumEnUnvarnishTx<54><78>ENABLE<4C><45>ʹ<EFBFBD>ܶ<EFBFBD><DCB6><EFBFBD><EFBFBD>ӣ<EFBFBD>DISABLE<4C><45><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bEsp8266EnableMultipleId ( FunctionalState xEnumEnUnvarnishTx )
|
||||
{
|
||||
return bEsp8266Command ( "AT+CIPMUX=%d", "OK", 0, 500 );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief bEsp8266LinkServer
|
||||
* @note ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param xNetProtocol<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param pcIp<49><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param pcComNum<75><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF><DABA>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param xId<49><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44>
|
||||
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD>ӳɹ<D3B3>
|
||||
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bEsp8266LinkServer ( eNetPro_t xNetProtocol, char * pcIp, char * pcComNum, eIdNo_t xId)
|
||||
{
|
||||
char cStr [128] = { 0 }, cCmd [128];
|
||||
switch ( xNetProtocol )
|
||||
{
|
||||
case enumTCP:
|
||||
sprintf ( cStr, "\"%s\",\"%s\",%s", "TCP", pcIp, pcComNum );
|
||||
break;
|
||||
case enumUDP:
|
||||
sprintf ( cStr, "\"%s\",\"%s\",%s", "UDP", pcIp, pcComNum );
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if ( xId < 5 )
|
||||
sprintf ( cCmd, "AT+CIPSTART=%d,%s", xId, cStr);
|
||||
else
|
||||
sprintf ( cCmd, "AT+CIPSTART=%s", cStr );
|
||||
return bEsp8266Command ( cCmd, "OK", "ALREADY CONNECT", 4000 );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief bEsp8266StartOrShutServer
|
||||
* @note ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>رշ<D8B1><D5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param xMode<64><65>ENABLE<4C><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DISABLE<4C><45><EFBFBD>رշ<D8B1><D5B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param pcPortNum<75><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF><DABA>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param pcTimeOver<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bEsp8266StartOrShutServer ( FunctionalState xMode, char * pcPortNum, char * pcTimeOver )
|
||||
{
|
||||
char cCmd1 [128], cCmd2 [128];
|
||||
if ( xMode )
|
||||
{
|
||||
sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 1, pcPortNum );
|
||||
sprintf ( cCmd2, "AT+CIPSTO=%s", pcTimeOver );
|
||||
return ( bEsp8266Command ( cCmd1, "OK", 0, 500 ) &&
|
||||
bEsp8266Command ( cCmd2, "OK", 0, 500 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 0, pcPortNum );
|
||||
return bEsp8266Command ( cCmd1, "OK", 0, 500 );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ucEsp8266GetLinkStatus
|
||||
* @note <20><>ȡESP8266<36><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param <20><>
|
||||
* @retval 0<><30>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
||||
* @retval 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AP<41><50>δ<EFBFBD><CEB4><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @retval 3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @retval 4<><34><EFBFBD><EFBFBD><EFBFBD>ӶϿ<D3B6>
|
||||
*/
|
||||
uint8_t ucEsp8266GetLinkStatus ( void )
|
||||
{
|
||||
if ( bEsp8266Command ( "AT+CIPSTATUS", "OK", 0, 500 ) )
|
||||
{
|
||||
if ( strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "STATUS:2\r\n" ) )
|
||||
return 2;
|
||||
else if ( strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "STATUS:3\r\n" ) )
|
||||
return 3;
|
||||
|
||||
else if ( strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "STATUS:4\r\n" ) )
|
||||
return 4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ucEsp8266GetIdLinkStatus
|
||||
* @note <20><>ȡESP8266<36>ĸ<EFBFBD>ID<49><44><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param <20><>
|
||||
* @retval <20><>ID<49><44><EFBFBD><EFBFBD>״̬<D7B4><CCAC>λ0~4<>ֱ<EFBFBD><D6B1><EFBFBD>ʾID0~ID4<44><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>1<EFBFBD><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>0<EFBFBD><30>ʾδ<CABE><CEB4><EFBFBD><EFBFBD>
|
||||
*/
|
||||
uint8_t ucEsp8266GetIdLinkStatus ( void )
|
||||
{
|
||||
uint8_t ucIdLinkStatus = 0x00;
|
||||
if ( bEsp8266Command ( "AT+CIPSTATUS", "OK", 0, 500 ) )
|
||||
{
|
||||
if ( strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "+CIPSTATUS:0," ) )
|
||||
ucIdLinkStatus |= 0x01;
|
||||
else
|
||||
ucIdLinkStatus &= ~ 0x01;
|
||||
if ( strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "+CIPSTATUS:1," ) )
|
||||
ucIdLinkStatus |= 0x02;
|
||||
else
|
||||
ucIdLinkStatus &= ~ 0x02;
|
||||
if ( strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "+CIPSTATUS:2," ) )
|
||||
ucIdLinkStatus |= 0x04;
|
||||
else
|
||||
ucIdLinkStatus &= ~ 0x04;
|
||||
if ( strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "+CIPSTATUS:3," ) )
|
||||
ucIdLinkStatus |= 0x08;
|
||||
else
|
||||
ucIdLinkStatus &= ~ 0x08;
|
||||
if ( strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "+CIPSTATUS:4," ) )
|
||||
ucIdLinkStatus |= 0x10;
|
||||
else
|
||||
ucIdLinkStatus &= ~ 0x10;
|
||||
}
|
||||
return ucIdLinkStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ucEsp8266InquireApIp
|
||||
* @note <20><>ȡESP8266<36><36>AP IP<49><50><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param pcApIp<49><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AP IP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
* @param ucArrayLength<74><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AP IP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
* @retval 0<><30><EFBFBD><EFBFBD>ȡʧ<C8A1><CAA7>
|
||||
* @retval 1<><31><EFBFBD><EFBFBD>ȡ<EFBFBD>ɹ<EFBFBD>
|
||||
*/
|
||||
uint8_t ucEsp8266InquireApIp ( char * pcApIp, uint8_t ucArrayLength )
|
||||
{
|
||||
char c;
|
||||
char * pCh;
|
||||
bEsp8266Command ( "AT+CIFSR", "OK", 0, 500 );
|
||||
pCh = strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "APIP,\"" );
|
||||
if ( pCh )
|
||||
pCh += 6;
|
||||
else
|
||||
return 0;
|
||||
for ( c = 0; c < ucArrayLength; c ++ )
|
||||
{
|
||||
pcApIp [ c ] = * ( pCh + c);
|
||||
if ( pcApIp [ c ] == '\"' )
|
||||
{
|
||||
pcApIp [ c ] = '\0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief bEsp8266UnvarnishSend
|
||||
* @note <20><><EFBFBD><EFBFBD>ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>ģʽ<C4A3><CABD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param <20><>
|
||||
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD>óɹ<C3B3>
|
||||
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bEsp8266UnvarnishSend ( void )
|
||||
{
|
||||
return bEsp8266Command ( "AT+CIPMODE=1", "OK", 0, 500 );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief vEsp8266ExitUnvarnishSend
|
||||
* @note ʹESP8266ģ<36><C4A3><EFBFBD>˳<EFBFBD><EFBFBD><CDB8>ģʽ<C4A3><CABD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param <20><>
|
||||
* @retval <20><>
|
||||
*/
|
||||
void vEsp8266ExitUnvarnishSend ( void )
|
||||
{
|
||||
vDelayMs( 1000 );
|
||||
vUsartPrintf ( USART2, "+++" );
|
||||
vDelayMs( 500 );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief bEsp8266SendString
|
||||
* @note ESP8266ģ<36>鷢<EFBFBD><E9B7A2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param xEnumEnUnvarnishTx<54><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><CDB8>ģʽ
|
||||
* @param pcStr<74><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
* @param ulStrLength<74><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param ucId<49><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44>
|
||||
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD>ͳɹ<CDB3>
|
||||
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bEsp8266SendString ( FunctionalState xEnumEnUnvarnishTx, char * pcStr, uint32_t ulStrLength, eIdNo_t xId )
|
||||
{
|
||||
char cStr [256];
|
||||
bool bRet = false;
|
||||
if ( xEnumEnUnvarnishTx )
|
||||
{
|
||||
vUsartPrintf ( USART2, "%s", pcStr );
|
||||
bRet = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( xId < 5 )
|
||||
sprintf ( cStr, "AT+CIPSEND=%d,%d", xId, ulStrLength + 2 );
|
||||
else
|
||||
sprintf ( cStr, "AT+CIPSEND=%d", ulStrLength + 2 );
|
||||
bEsp8266Command ( cStr, "> ", 0, 1000 );
|
||||
bRet = bEsp8266Command ( pcStr, "SEND OK", 0, 1000 );
|
||||
}
|
||||
return bRet;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief pcEsp8266ReceiveString
|
||||
* @note ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param xEnumEnUnvarnishTx<54><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><CDB8>ģʽ
|
||||
* @retval <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>δ<EFBFBD><CEB4><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>0
|
||||
*/
|
||||
char * pcEsp8266ReceiveString ( FunctionalState xEnumEnUnvarnishTx )
|
||||
{
|
||||
char * pRecStr = 0;
|
||||
xSerialFrameRecord.Bits_t.usFrameLength = 0;
|
||||
xSerialFrameRecord.Bits_t.usFrameFinishFlag = 0;
|
||||
while ( ! xSerialFrameRecord.Bits_t.usFrameFinishFlag );
|
||||
xSerialFrameRecord.cSerialReceivedBuffer [ xSerialFrameRecord.Bits_t.usFrameLength ] = '\0';
|
||||
if ( xEnumEnUnvarnishTx )
|
||||
pRecStr = xSerialFrameRecord.cSerialReceivedBuffer;
|
||||
else
|
||||
{
|
||||
if ( strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "+IPD" ) )
|
||||
pRecStr = xSerialFrameRecord.cSerialReceivedBuffer;
|
||||
}
|
||||
return pRecStr;
|
||||
}
|
||||
|
||||
267
STM32/Gateway_Node/Drivers/ESP8266.c.bkp
Normal file
267
STM32/Gateway_Node/Drivers/ESP8266.c.bkp
Normal file
@@ -0,0 +1,267 @@
|
||||
#include "ESP8266.h"
|
||||
|
||||
/**
|
||||
* @brief <20>ָ<EFBFBD>ESP8266<36><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vEsp8266Restore(NetFifoBuffer_t *pxEspBuffer)
|
||||
{
|
||||
vUsartPrintf(USART2, "AT+RESTORE\r\n");
|
||||
// if (ucEsp8266ResHandler(pxEspBuffer) == ESP8266_RESPONSE_READY)
|
||||
// {
|
||||
// /* code */
|
||||
// ucEsp8266Log(pxEspBuffer);
|
||||
// } else
|
||||
// {
|
||||
// ucEsp8266Log(pxEspBuffer);
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD>ESP8266ģ<36><C4A3>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vEsp8266Reset(void)
|
||||
{
|
||||
vUsartPrintf(USART2, "AT+RST\r\n");
|
||||
// if (ucEsp8266ResHandler(pxEspBuffer) == ESP8266_RESPONSE_READY)
|
||||
// {
|
||||
// /* code */
|
||||
// ucEsp8266Log(pxEspBuffer);
|
||||
// } else
|
||||
// {
|
||||
// ucEsp8266Log(pxEspBuffer);
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD>ESP8266<36><36><EFBFBD><EFBFBD>ģʽ
|
||||
* @param ucMode: <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>0<EFBFBD><30>SoftAPģʽ<C4A3><CABD>1<EFBFBD><31>Stationģʽ<C4A3><CABD>
|
||||
* @retval <20><><EFBFBD>ú<EFBFBD><C3BA>Ĺ<EFBFBD><C4B9><EFBFBD>ģʽ
|
||||
*/
|
||||
eEsp8266Mode_t ucEsp8266SetMode(uint8_t ucMode)
|
||||
{
|
||||
vUsartPrintf(USART2, "AT+CWMODE=%d\r\n", ucMode);
|
||||
if (ucMode == 1)
|
||||
{
|
||||
/* code */
|
||||
return ESP8266_MODE_STATION;
|
||||
} else if (ucMode == 0)
|
||||
{
|
||||
/* code */
|
||||
return ESP8266_MODE_SOFTAP;
|
||||
} else
|
||||
{
|
||||
return INVALID_MODE; // <20><>Чģʽ
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD>ӵ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>WiFi<46>ȵ<EFBFBD>
|
||||
* @param *pcSsid: WiFi<46><69><EFBFBD><EFBFBD>
|
||||
* @param *pcPassword: WiFi<46><69><EFBFBD><EFBFBD>
|
||||
* @retval None
|
||||
*/
|
||||
void vEsp8266JoinAp(const char *pcSsid, const char *pcPassword)
|
||||
{
|
||||
vUsartPrintf(USART2, "AT+CWJAP=\"%s\",\"%s\"\r\n", pcSsid, pcPassword);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD>ESP8266<36><36>Ӧ
|
||||
* @param *pxEspBuffer ESP8266<36><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* @retval 0: <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>, 1: <20>ɹ<EFBFBD>, 2: ʧ<><CAA7>
|
||||
*/
|
||||
eEsp8266Status_t ucEsp8266ResHandler(NetFifoBuffer_t *pxEspBuffer)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
|
||||
if (strstr(pxEspBuffer->cNetFifoBuffer, "ready") != NULL)
|
||||
{
|
||||
vNetBufferClear(pxEspBuffer);
|
||||
return ESP8266_RESPONSE_READY; // <20>ɹ<EFBFBD>
|
||||
} else if (strstr(pxEspBuffer->cNetFifoBuffer, "OK") != NULL)
|
||||
{
|
||||
vNetBufferClear(pxEspBuffer);
|
||||
return ESP8266_RESPONSE_OK; // <20>ɹ<EFBFBD>
|
||||
} else if (strstr(pxEspBuffer->cNetFifoBuffer, "ERROR") != NULL ||
|
||||
strstr(pxEspBuffer->cNetFifoBuffer, "FAIL") != NULL)
|
||||
{
|
||||
vNetBufferClear(pxEspBuffer);
|
||||
return ESP8266_RESPONSE_ERROR; // ʧ<><CAA7>
|
||||
} else
|
||||
{
|
||||
/* code */
|
||||
vNetBufferClear(pxEspBuffer);
|
||||
return ESP8266_RESPONSE_TIMEOUT; // <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>
|
||||
}
|
||||
}
|
||||
|
||||
// /**
|
||||
// * @brief <20>ȴ<EFBFBD>ESP8266<36><36>Ӧ
|
||||
// * @param *pxEspBuffer ESP8266<36><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// * @param xTimeout <20><>ʱʱ<CAB1>䣨<EFBFBD><E4A3A8>TickType_tΪ<74><CEAA>λ<EFBFBD><CEBB>
|
||||
// * @retval <20><>Ӧ״̬
|
||||
// */
|
||||
// eEsp8266Status_t xEsp8266WaitForResponse(NetFifoBuffer_t *pxEspBuffer, TickType_t xTimeout)
|
||||
// {
|
||||
// TickType_t startTime = xTaskGetTickCount();
|
||||
// while ((xTaskGetTickCount() - startTime) < xTimeout)
|
||||
// {
|
||||
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
|
||||
// eEsp8266Status_t status = ucEsp8266ResHandler(pxEspBuffer);
|
||||
// if (status != ESP8266_RESPONSE_READY)
|
||||
// {
|
||||
// return status; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ״̬
|
||||
// }
|
||||
// }
|
||||
// return ESP8266_RESPONSE_TIMEOUT; // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>
|
||||
// }
|
||||
|
||||
/**
|
||||
* @brief <20><>¼ESP8266<36><36>Ӧ<EFBFBD><D3A6>־
|
||||
* @param *pxEspBuffer ESP8266<36><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* @retval None
|
||||
*/
|
||||
void ucEsp8266Log(NetFifoBuffer_t *pxEspBuffer)
|
||||
{
|
||||
if (ucEsp8266ResHandler(pxEspBuffer) == ESP8266_RESPONSE_READY)
|
||||
{
|
||||
/* code */
|
||||
vUsartSendString(USART3, "WiFi Reset Successfully!\r\n");
|
||||
vUsartSendString(USART3, pxEspBuffer->cNetFifoBuffer);
|
||||
vUsartSendString(USART3, "\r\n");
|
||||
} else if (ucEsp8266ResHandler(pxEspBuffer) == ESP8266_RESPONSE_OK)
|
||||
{
|
||||
/* code */
|
||||
vUsartSendString(USART3, "Set WiFi Mode Successfully!\r\n");
|
||||
vUsartSendString(USART3, pxEspBuffer->cNetFifoBuffer);
|
||||
vUsartSendString(USART3, "\r\n");
|
||||
} else if (ucEsp8266ResHandler(pxEspBuffer) == ESP8266_RESPONSE_ERROR)
|
||||
{
|
||||
vUsartSendString(USART3, "Error!\r\n");
|
||||
vUsartSendString(USART3, pxEspBuffer->cNetFifoBuffer);
|
||||
vUsartSendString(USART3, "\r\n");
|
||||
} else
|
||||
{
|
||||
vUsartSendString(USART3, "Other Error!\r\n");
|
||||
vUsartSendString(USART3, pxEspBuffer->cNetFifoBuffer);
|
||||
vUsartSendString(USART3, "\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD>FreeRTOS<4F>ж<EFBFBD><D0B6><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>л<EFBFBD><D0BB>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ESP8266<36><36><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ݴ浽<DDB4><E6B5BD><EFBFBD>õ<EFBFBD>FIFO<46><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD>
|
||||
* @note <20><><EFBFBD>⣺<EFBFBD><E2A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>쵽һ<ECB5BD><D2BB><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ࡣ
|
||||
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD><D8B6>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD><D6B8>
|
||||
* @retval None
|
||||
*/
|
||||
void vTaskWifiConnection(void *pvParameters)
|
||||
{
|
||||
NetFifoBuffer_t espBuffer;
|
||||
vNetBufferInit(&espBuffer);
|
||||
uint8_t ucRetvalQueueWifiSta = 0;
|
||||
uint8_t ucRetvalQueueByte = 0;
|
||||
while (1)
|
||||
{
|
||||
/* code */
|
||||
vEsp8266Reset();
|
||||
TickType_t startTime = xTaskGetTickCount();
|
||||
while ((xTaskGetTickCount() - startTime) < pdMS_TO_TICKS(3000))
|
||||
{
|
||||
ucRetvalQueueWifiSta = xQueueReceive(xQueueUsart2IrqHdlr,
|
||||
&ucRetvalQueueByte,
|
||||
pdMS_TO_TICKS(100));
|
||||
if (ucRetvalQueueWifiSta == pdTRUE)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ֽڴ<D6BD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
vNetBufferWrite(&espBuffer, (char)ucRetvalQueueByte);
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
|
||||
uint8_t ucResponseStatus = ucEsp8266ResHandler(&espBuffer);
|
||||
if (strstr(espBuffer.cNetFifoBuffer, "ready") != NULL)
|
||||
{
|
||||
vUsartSendString(USART3, "WiFi Reset Successfully!\r\n");
|
||||
vUsartSendString(USART3, espBuffer.cNetFifoBuffer);
|
||||
vTaskDelay(1000);
|
||||
break;
|
||||
} else if (strstr(espBuffer.cNetFifoBuffer, "OK") != NULL)
|
||||
{
|
||||
/* code */
|
||||
vUsartSendString(USART3, "Set WiFi Mode Successfully!\r\n");
|
||||
vUsartSendString(USART3, espBuffer.cNetFifoBuffer);
|
||||
} else if (strstr(espBuffer.cNetFifoBuffer, "ERROR") != NULL ||
|
||||
strstr(espBuffer.cNetFifoBuffer, "FAIL") != NULL)
|
||||
{
|
||||
vUsartSendString(USART3, "Error!\r\n");
|
||||
vUsartSendString(USART3, espBuffer.cNetFifoBuffer);
|
||||
vUsartSendString(USART3, "\r\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
}
|
||||
void vTaskBufferRx(void *pvParameters)
|
||||
{
|
||||
NetFifoBuffer_t espBuffer;
|
||||
vNetBufferInit(&espBuffer);
|
||||
uint8_t ucRetvalQueueWifiSta = 0;
|
||||
uint8_t ucRetvalQueueByte = 0;
|
||||
while (1)
|
||||
{
|
||||
/* code */
|
||||
TickType_t startTime = xTaskGetTickCount();
|
||||
while ((xTaskGetTickCount() - startTime) < pdMS_TO_TICKS(3000))
|
||||
{
|
||||
ucRetvalQueueWifiSta = xQueueReceive(xQueueUsart2IrqHdlr,
|
||||
&ucRetvalQueueByte,
|
||||
pdMS_TO_TICKS(100));
|
||||
if (ucRetvalQueueWifiSta == pdTRUE)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ֽڴ<D6BD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
vNetBufferWrite(&espBuffer, (char)ucRetvalQueueByte);
|
||||
|
||||
}
|
||||
}
|
||||
vTaskDelay(100);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD>ESP8266ģ<36>顣
|
||||
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD><D8B6>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD><D6B8>
|
||||
* @retval None
|
||||
*/
|
||||
void vTaskWifiConnection(void *pvParameters)
|
||||
{
|
||||
NetFifoBuffer_t espBuffer;
|
||||
while (1)
|
||||
{
|
||||
/* code */
|
||||
vEsp8266Reset();
|
||||
if (strstr(espBuffer.cNetFifoBuffer, "ready") != NULL)
|
||||
{
|
||||
vUsartSendString(USART3, "WiFi Reset Successfully!\r\n");
|
||||
vUsartSendString(USART3, espBuffer.cNetFifoBuffer);
|
||||
vTaskDelay(1000);
|
||||
break;
|
||||
} else if (strstr(espBuffer.cNetFifoBuffer, "OK") != NULL)
|
||||
{
|
||||
/* code */
|
||||
vUsartSendString(USART3, "Set WiFi Mode Successfully!\r\n");
|
||||
vUsartSendString(USART3, espBuffer.cNetFifoBuffer);
|
||||
} else if (strstr(espBuffer.cNetFifoBuffer, "ERROR") != NULL ||
|
||||
strstr(espBuffer.cNetFifoBuffer, "FAIL") != NULL)
|
||||
{
|
||||
vUsartSendString(USART3, "Error!\r\n");
|
||||
vUsartSendString(USART3, espBuffer.cNetFifoBuffer);
|
||||
vUsartSendString(USART3, "\r\n");
|
||||
break;
|
||||
}
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,120 @@
|
||||
#ifndef __ESP8266_H__
|
||||
#define __ESP8266_H__
|
||||
#ifndef __ESP8266_SAMPLE_H__
|
||||
#define __ESP8266_SAMPLE_H__
|
||||
|
||||
#include "stm32f10x.h"
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include "Delay.h"
|
||||
#include "USART.h"
|
||||
|
||||
#if defined ( __CC_ARM )
|
||||
#pragma anon_unions
|
||||
#endif
|
||||
|
||||
/******************************* ESP8266 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> ***************************/
|
||||
typedef enum{
|
||||
STA,
|
||||
AP,
|
||||
STA_AP
|
||||
} eNetMode_t;
|
||||
|
||||
typedef enum{
|
||||
ALIYUN = 0,
|
||||
EMQX
|
||||
} eMqttServerMode_t;
|
||||
|
||||
typedef enum{
|
||||
enumTCP,
|
||||
enumUDP,
|
||||
} eNetPro_t;
|
||||
|
||||
typedef enum{
|
||||
Multiple_ID_0 = 0,
|
||||
Multiple_ID_1,
|
||||
Multiple_ID_2,
|
||||
Multiple_ID_3,
|
||||
Multiple_ID_4,
|
||||
Single_ID_0,
|
||||
} eIdNo_t;
|
||||
|
||||
typedef enum{
|
||||
OPEN = 0,
|
||||
WEP,
|
||||
WPA_PSK,
|
||||
WPA2_PSK,
|
||||
WPA_WPA2_PSK,
|
||||
} eApPsdMode_t;
|
||||
|
||||
/* ESP8266 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD> */
|
||||
#define macESP8266_CH_PD_CLK RCC_APB2Periph_GPIOA
|
||||
#define macESP8266_CH_PD_PORT GPIOA
|
||||
#define macESP8266_CH_PD_PIN GPIO_Pin_5
|
||||
#define macESP8266_RST_CLK RCC_APB2Periph_GPIOA
|
||||
#define macESP8266_RST_PORT GPIOA
|
||||
#define macESP8266_RST_PIN GPIO_Pin_6
|
||||
|
||||
/* ESP8266 <20><><EFBFBD><EFBFBD><EFBFBD>궨<EFBFBD><EAB6A8> */
|
||||
// #define vEsp8266Printf(*format, ...) vUsartPrintf(macESP8266_USART, *format, ...)
|
||||
#define macESP8266_CH_ENABLE() GPIO_SetBits ( macESP8266_CH_PD_PORT, macESP8266_CH_PD_PIN )
|
||||
#define macESP8266_CH_DISABLE() GPIO_ResetBits ( macESP8266_CH_PD_PORT, macESP8266_CH_PD_PIN )
|
||||
#define macESP8266_RST_HIGH_LEVEL() GPIO_SetBits ( macESP8266_RST_PORT, macESP8266_RST_PIN )
|
||||
#define macESP8266_RST_LOW_LEVEL() GPIO_ResetBits ( macESP8266_RST_PORT, macESP8266_RST_PIN )
|
||||
|
||||
/* <20>û<EFBFBD><C3BB><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>õIJ<C3B5><C4B2><EFBFBD> */
|
||||
#define ESP8266_APSSID "CMCC-5bjx" // Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD><D3B5>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define ESP8266_APPWD "jp7qpqn3" // Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD><D3B5>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>Կ
|
||||
|
||||
#define ALIYUN 0
|
||||
#define EMQX 1
|
||||
#define ESP8266_MQTT_SERVER_MODE EMQX // ѡ<><D1A1>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ALIYUN/EMQX
|
||||
|
||||
#define ESP8266_EMQX_MQTT_SERVER_IP "121.36.104.9" // MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ
|
||||
#define ESP8266_EMQX_MQTT_SERVER_PORT 1883 // MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF>
|
||||
#define ESP8266_EMQX_MQTT_PROJECTID "LoRaEnvAssistant" // MQTT<54><54>ĿID
|
||||
#define ESP8266_EMQX_MQTT_DEVICENAME "stm32" // MQTT<54>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
||||
#define ESP8266_EMQX_MQTT_SUB_DEVICENAME "mqttfx" // MQTT<54><54><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
||||
#define ESP8266_EMQX_MQTT_CLIENTID ESP8266_EMQX_MQTT_PROJECTID"&"ESP8266_EMQX_MQTT_DEVICENAME // MQTT<54>ͻ<EFBFBD><CDBB><EFBFBD>ID
|
||||
#define ESP8266_EMQX_MQTT_USERNAME ESP8266_EMQX_MQTT_DEVICENAME // MQTT<54>û<EFBFBD><C3BB><EFBFBD>
|
||||
#define ESP8266_EMQX_MQTT_PASSWORD "123456789" // MQTT<54><54><EFBFBD><EFBFBD>
|
||||
#define ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC "/"ESP8266_EMQX_MQTT_PROJECTID"/"ESP8266_EMQX_MQTT_PROJECTID"&"ESP8266_EMQX_MQTT_SUB_DEVICENAME"/topics" // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define ESP8266_EMQX_MQTT_PUBLISH_TOPIC "/"ESP8266_EMQX_MQTT_PROJECTID"/"ESP8266_EMQX_MQTT_CLIENTID"/topics" // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#define ESP8266_ALIYUN_MQTT_IP "iot-06z00by9al78fmz.mqtt.iothub.aliyuncs.com"
|
||||
#define ESP8266_ALIYUN_MQTT_PORT 1883
|
||||
#define ESP8266_ALIYUN_MQTT_PRODUCTKEY "k11ilqnf8mF"
|
||||
#define ESP8266_ALIYUN_MQTT_DEVICENAME "GATEWAY_STM32_ESP8266"
|
||||
#define ESP8266_ALIYUN_MQTT_CLIENTID ESP8266_ALIYUN_MQTT_PRODUCTKEY"."ESP8266_ALIYUN_MQTT_DEVICENAME \
|
||||
"|securemode=2\\,signmethod=hmacsha256\\,timestamp=1768415322303|"
|
||||
#define ESP8266_ALIYUN_MQTT_USERNAME ESP8266_ALIYUN_MQTT_DEVICENAME"&"ESP8266_ALIYUN_MQTT_PRODUCTKEY
|
||||
#define ESP8266_ALIYUN_MQTT_PASSWORD "a74261b04d7dda672342776b88e956f26f74f4d9d104461f8b65cbf544ab9c03"
|
||||
#define ESP8266_ALIYUN_MQTT_SUBSCRIBE_TOPIC "/"ESP8266_ALIYUN_MQTT_PRODUCTKEY"/"ESP8266_ALIYUN_MQTT_DEVICENAME"/user/get"
|
||||
#define ESP8266_ALIYUN_MQTT_PUBLISH_TOPIC "/"ESP8266_ALIYUN_MQTT_PRODUCTKEY"/"ESP8266_ALIYUN_MQTT_DEVICENAME"/user/update"
|
||||
|
||||
/* ESP8266 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
void vEsp8266GpioConfig ( void );
|
||||
void vEsp8266Rst ( void );
|
||||
bool bEsp8266Command ( char * pcCmd, char * pcAck1,
|
||||
char * pcAck2, uint32_t ulWaittime );
|
||||
void vEsp8266AtTest ( void );
|
||||
bool bEsp8266NetModeChoose ( eNetMode_t xMode );
|
||||
bool bEsp8266JoinAp ( char * pcSsid, char * pcPassWord );
|
||||
bool bEsp8266MqttInit ( char * pcMqttUserName, char * pcMqttPassword, char * pcMqttClientId,
|
||||
char * pcMqttServerIp, uint16_t usMqttServerPort, char * pcMqttSubscribeTopic );
|
||||
bool bEsp8266BuildAp ( char * pcSsid, char * pcPassWord, eApPsdMode_t xPsdMode );
|
||||
bool bEsp8266EnableMultipleId ( FunctionalState xEnumEnUnvarnishTx );
|
||||
bool bEsp8266LinkServer ( eNetPro_t xNetProtocol, char * pcIp,
|
||||
char * pcComNum, eIdNo_t xId);
|
||||
bool bEsp8266StartOrShutServer ( FunctionalState xMode, char * pcPortNum, char * pcTimeOver );
|
||||
uint8_t ucEsp8266GetLinkStatus ( void );
|
||||
uint8_t ucEsp8266GetIdLinkStatus ( void );
|
||||
uint8_t ucEsp8266InquireApIp ( char * pcApIp, uint8_t ucArrayLength );
|
||||
bool bEsp8266UnvarnishSend ( void );
|
||||
void vEsp8266ExitUnvarnishSend ( void );
|
||||
bool bEsp8266SendString ( FunctionalState xEnumEnUnvarnishTx, char * pcStr,
|
||||
uint32_t ulStrLength, eIdNo_t xId );
|
||||
char * pcEsp8266ReceiveString ( FunctionalState xEnumEnUnvarnishTx );
|
||||
|
||||
/* <20>ⲿȫ<E2B2BF>ֱ<EFBFBD><D6B1><EFBFBD> */
|
||||
|
||||
#endif /* __ESP8266_H */
|
||||
|
||||
30
STM32/Gateway_Node/Drivers/ESP8266.h.bkp
Normal file
30
STM32/Gateway_Node/Drivers/ESP8266.h.bkp
Normal file
@@ -0,0 +1,30 @@
|
||||
#ifndef __ESP8266_H__
|
||||
#define __ESP8266_H__
|
||||
|
||||
#include "string.h"
|
||||
#include "stdbool.h"
|
||||
#include "USART.h"
|
||||
#include "NetFIFO.h"
|
||||
|
||||
typedef enum {
|
||||
ESP8266_MODE_STATION = 0,
|
||||
ESP8266_MODE_SOFTAP,
|
||||
INVALID_MODE
|
||||
} eEsp8266Mode_t;
|
||||
|
||||
typedef enum {
|
||||
ESP8266_RESPONSE_READY = 0,
|
||||
ESP8266_RESPONSE_OK,
|
||||
ESP8266_RESPONSE_ERROR,
|
||||
ESP8266_RESPONSE_BUSY,
|
||||
ESP8266_RESPONSE_TIMEOUT
|
||||
} eEsp8266Status_t;
|
||||
|
||||
void vEsp8266Restore(NetFifoBuffer_t *pxEspBuffer);
|
||||
void vEsp8266Reset(void);
|
||||
eEsp8266Mode_t ucEsp8266SetMode(uint8_t ucMode);
|
||||
void vEsp8266JoinAp(const char *pcSsid, const char *pcPassword);
|
||||
eEsp8266Status_t ucEsp8266ResHandler(NetFifoBuffer_t *pxEspBuffer);
|
||||
void ucEsp8266Log(NetFifoBuffer_t *pxEspBuffer);
|
||||
|
||||
#endif
|
||||
@@ -58,7 +58,7 @@
|
||||
#define configUSE_TIME_SLICING 1
|
||||
/* <20><><EFBFBD>С<EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA>ر<EFBFBD> */
|
||||
#define configUSE_QUEUE_SETS 0
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>ܣ<EFBFBD>Ĭ<EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> */
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>Ĭ<EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD> */
|
||||
#define configUSE_TASK_NOTIFICATIONS 1
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
#define configUSE_MUTEXES 0
|
||||
@@ -116,7 +116,7 @@
|
||||
* 4.һ<><D2BB>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><DEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>ĿΪ32
|
||||
* һ<><D2BB><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õģ<C3B5>MCUû<55><C3BB><EFBFBD><EFBFBD>ЩӲ<D0A9><D3B2>ָ<EFBFBD><D6B8><EFBFBD>Ļ<EFBFBD><C4BB>˺<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0 !
|
||||
*/
|
||||
#define configUSE_PORT_OPTIMISED_TASK SELECTION 1
|
||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||
/*
|
||||
* configUSE_TICKLESS_IDLE
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -149,6 +149,23 @@
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint/>
|
||||
<WatchWindow1>
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>bMqttUserCfgInit</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>1</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>bMqttCliIdInit</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>2</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>bMqttConnectResult</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow1>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
</Tracepoint>
|
||||
@@ -293,7 +310,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>User</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -908,8 +925,8 @@
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>System</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<GroupName>BSP</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -920,7 +937,7 @@
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\System\Delay.c</PathWithFileName>
|
||||
<PathWithFileName>.\BSP\Delay.c</PathWithFileName>
|
||||
<FilenameWithoutPath>Delay.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
@@ -932,7 +949,7 @@
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\System\Delay.h</PathWithFileName>
|
||||
<PathWithFileName>.\BSP\Delay.h</PathWithFileName>
|
||||
<FilenameWithoutPath>Delay.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
@@ -944,7 +961,7 @@
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\System\USART.c</PathWithFileName>
|
||||
<PathWithFileName>.\BSP\USART.c</PathWithFileName>
|
||||
<FilenameWithoutPath>USART.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
@@ -956,7 +973,7 @@
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\System\USART.h</PathWithFileName>
|
||||
<PathWithFileName>.\BSP\USART.h</PathWithFileName>
|
||||
<FilenameWithoutPath>USART.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
@@ -965,7 +982,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>Drivers</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -1045,7 +1062,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>FreeRTOS/inc</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -1269,7 +1286,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>FreeRTOS/src</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -1361,7 +1378,7 @@
|
||||
|
||||
<Group>
|
||||
<GroupName>FreeRTOS/portable</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
@@ -1423,4 +1440,36 @@
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>Application/App_MQTT</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<FileNumber>96</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\Application\App_MQTT\App_MQTT.c</PathWithFileName>
|
||||
<FilenameWithoutPath>App_MQTT.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>10</GroupNumber>
|
||||
<FileNumber>97</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\Application\App_MQTT\App_MQTT.h</PathWithFileName>
|
||||
<FilenameWithoutPath>App_MQTT.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
</ProjectOpt>
|
||||
|
||||
@@ -341,7 +341,7 @@
|
||||
<MiscControls>--no-multibyte-chars</MiscControls>
|
||||
<Define>USE_STDPERIPH_DRIVER</Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath>.\SystemFiles;.\Libraries\inc;.\User;.\System;.\Drivers;.\FreeRTOS\inc;.\FreeRTOS\portable\RVDS\ARM_CM3;.\FreeRTOS\config</IncludePath>
|
||||
<IncludePath>.\SystemFiles;.\Libraries\inc;.\User;.\BSP;.\Drivers;.\FreeRTOS\inc;.\FreeRTOS\portable\RVDS\ARM_CM3;.\FreeRTOS\config;.\Application\NetFIFO;.\Application\App_MQTT</IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
<Aads>
|
||||
@@ -678,27 +678,27 @@
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>System</GroupName>
|
||||
<GroupName>BSP</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>Delay.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\System\Delay.c</FilePath>
|
||||
<FilePath>.\BSP\Delay.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>Delay.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\System\Delay.h</FilePath>
|
||||
<FilePath>.\BSP\Delay.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>USART.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\System\USART.c</FilePath>
|
||||
<FilePath>.\BSP\USART.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>USART.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\System\USART.h</FilePath>
|
||||
<FilePath>.\BSP\USART.h</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
@@ -902,6 +902,21 @@
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Application/App_MQTT</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>App_MQTT.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\Application\App_MQTT\App_MQTT.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>App_MQTT.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>.\Application\App_MQTT\App_MQTT.h</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
</Groups>
|
||||
</Target>
|
||||
</Targets>
|
||||
|
||||
@@ -1,130 +0,0 @@
|
||||
#include "Delay.h"
|
||||
|
||||
#if MODE == USE_SYS_TICK
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>ӳٺ<D3B3><D9BA><EFBFBD>
|
||||
//SYSTICK<43><4B>ʱ<EFBFBD>ӹ̶<D3B9>ΪAHBʱ<42>ӵ<EFBFBD>1/8
|
||||
//SYSCLK:ϵͳʱ<CDB3><CAB1>Ƶ<EFBFBD><C6B5>
|
||||
void vDelayInit(void)
|
||||
{
|
||||
uint8_t ucSYSCLK;
|
||||
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
|
||||
xUcFacInit.ucFacUs=ucSYSCLK/8;
|
||||
xUcFacInit.usFacMs=(uint16_t)xUcFacInit.ucFacUs*1000;
|
||||
}
|
||||
|
||||
//<2F><>ʱnus
|
||||
//nusΪҪ<CEAA><D2AA>ʱ<EFBFBD><CAB1>us<75><73>.
|
||||
void vDelayUs(uint32_t ulNus)
|
||||
{
|
||||
uint32_t ulTemp;
|
||||
SysTick->LOAD=ulNus*xUcFacInit.ucFacUs; //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->VAL=0x00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
do
|
||||
{
|
||||
ulTemp=SysTick->CTRL;
|
||||
} while((ulTemp&0x01)&&!(ulTemp&(1<<16))); //<2F>ȴ<EFBFBD>ʱ<EFBFBD>䵽<EFBFBD><E4B5BD>
|
||||
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->VAL =0x00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//<2F><>ʱnms
|
||||
//ע<><D7A2>nms<6D>ķ<EFBFBD>Χ
|
||||
//SysTick->LOADΪ24λ<34>Ĵ<EFBFBD><C4B4><EFBFBD>,<2C><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱΪ:
|
||||
//nms<=0xffffff*8*1000/SYSCLK
|
||||
//SYSCLK<4C><4B>λΪHz,nms<6D><73>λΪms
|
||||
//<2F><>72M<32><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,nms<=1864
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD>뼶<EFBFBD><EBBCB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD>Systick<63><6B>ʱ<EFBFBD><CAB1>Ϊ24λ<34><CEBB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ֵΪ0xFFFFFF<46><46>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>16777215<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>0xFFFFFF<46><46><EFBFBD><EFBFBD>ʵ<EFBFBD>ʼ<EFBFBD><CABC>ص<EFBFBD>ֵ<EFBFBD><D6B5>ȡģ<C8A1><C4A3><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD><EFBFBD>̡<EFBFBD>
|
||||
* <20><><EFBFBD>Գ<EFBFBD><D4B3><EFBFBD>1.864s<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ᵼ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>ʱΪxms-16777215<31>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD>º<EFBFBD><C2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>ʱ<EFBFBD>Ƿ<C7B7><F1B3ACB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳɶ<D6B3><C9B6><EFBFBD>1000ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vDelayMs(uint16_t usNms)
|
||||
{
|
||||
uint32_t ulTemp;
|
||||
while (usNms)
|
||||
{
|
||||
uint16_t current = (usNms > 1000) ? 1000 : usNms;
|
||||
usNms -= current;
|
||||
|
||||
SysTick->LOAD = (uint32_t)current * xUcFacInit.usFacMs;
|
||||
SysTick->VAL = 0x00;
|
||||
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
|
||||
do
|
||||
{
|
||||
ulTemp = SysTick->CTRL;
|
||||
} while ((ulTemp & 0x01) && !(ulTemp & (1 << 16)));
|
||||
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
|
||||
SysTick->VAL = 0x00;
|
||||
}
|
||||
}
|
||||
|
||||
#elif MODE == USE_DWT
|
||||
|
||||
void vDelayInit(void)
|
||||
{
|
||||
//ʹ<><CAB9>DWT<57><54><EFBFBD><EFBFBD>
|
||||
DEMCR |= (uint32_t)TRCENA;
|
||||
|
||||
//DWT CYCCNT<4E>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
DWT_CYCCNT = (uint32_t)0u;
|
||||
|
||||
//ʹ<><CAB9>Cortex-M3 DWT CYCCNT<4E>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
DWT_CTRL |= (uint32_t)DWT_CTRL_CYCCNTENA;
|
||||
}
|
||||
|
||||
// <><CEA2><EFBFBD><EFBFBD>ʱ
|
||||
void vDelayUs(uint32_t ulNus)
|
||||
{
|
||||
if(ulNus > 10000) ulNus = 10000;
|
||||
|
||||
uint32_t ulTicksStart, ulTicksEnd, ulTicksDelay;
|
||||
|
||||
ulTicksStart = DWT_CYCCNT;
|
||||
ulTicksDelay = ( ulNus * ( SystemCoreClock / (1000000) ) ); // <20><><EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵδ<C9B5><CEB4><EFBFBD>
|
||||
ulTicksEnd = ulTicksStart + ulTicksDelay;
|
||||
|
||||
// ulTicksEndû<64><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if ( ulTicksEnd >= ulTicksStart )
|
||||
{
|
||||
// DWT_CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(DWT_CYCCNT > ulTicksStart)
|
||||
{
|
||||
while( DWT_CYCCNT < ulTicksEnd );
|
||||
}
|
||||
// DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>
|
||||
else
|
||||
{
|
||||
// <20>Ѿ<EFBFBD><D1BE><EFBFBD>ʱ<EFBFBD><CAB1>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
||||
return;
|
||||
}
|
||||
}
|
||||
else // ulTicksEnd<6E><64><EFBFBD><EFBFBD>
|
||||
{
|
||||
// DWT_CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(DWT_CYCCNT > ulTicksStart)
|
||||
{
|
||||
// <20>ȴ<EFBFBD>DWT_CYCCNT<4E><54>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
while( DWT_CYCCNT > ulTicksEnd );
|
||||
}
|
||||
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>ulTicksEnd
|
||||
while( DWT_CYCCNT < ulTicksEnd );
|
||||
}
|
||||
}
|
||||
|
||||
void vDelayMs(uint16_t usNms)
|
||||
{
|
||||
for(uint16_t i = 0; i < usNms; i++)
|
||||
{
|
||||
// delay 1 ms
|
||||
vDelayUs(1000);
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
#endif
|
||||
@@ -1,43 +0,0 @@
|
||||
#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 <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
|
||||
#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
|
||||
@@ -1,106 +1,269 @@
|
||||
#include "stm32f10x.h" // Device header
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "queue.h"
|
||||
#include "semphr.h"
|
||||
#include "Delay.h"
|
||||
#include "USART.h"
|
||||
#include "LED.h"
|
||||
#include "ESP8266.h"
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "queue.h"
|
||||
#include "App_MQTT.h"
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>֤<EFBFBD>ĸĶ<C4B8><C4B6><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>ڡ<EFBFBD> */
|
||||
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һһ<D2BB><D2BB>Ӧ<EFBFBD><D3A6> */
|
||||
TaskHandle_t xTaskStateLedHdlr;
|
||||
TaskHandle_t xTaskWifiConnectHdlr;
|
||||
TaskHandle_t xTaskWorkStatusLedHdlr;
|
||||
TaskHandle_t xTaskWifiJoinApHdlr;
|
||||
TaskHandle_t xTaskWifiNwkInitHdlr;
|
||||
TaskHandle_t xTaskMqttPublishHdlr;
|
||||
TaskHandle_t xTaskMqttSubscribeHdlr;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD> */
|
||||
QueueHandle_t xQueueUsart1IrqHdlr;
|
||||
QueueHandle_t xQueueUsart2IrqHdlr;
|
||||
QueueHandle_t xQueueUsart3IrqHdlr;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
SemaphoreHandle_t xSemWifiRetOkHdlr;
|
||||
SemaphoreHandle_t xSemWifiRetErrHdlr;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
void vTaskStateLed(void *pvParameters)
|
||||
/**
|
||||
* @brief ״ָ̬ʾLED<45><44><EFBFBD><EFBFBD>
|
||||
* @note ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PC13<31><33><EFBFBD>ŵ<EFBFBD>LED<45>ƣ<EFBFBD>ʵ<EFBFBD><CAB5>ϵͳ״̬<D7B4><CCAC>ָʾ<D6B8><CABE><EFBFBD>ܡ<EFBFBD>
|
||||
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD><D8B6>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD><D6B8>
|
||||
* @retval None
|
||||
*/
|
||||
void vTaskWorkStatusLed(void *pvParameters)
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
vPc13LedOn();
|
||||
vTaskDelay(1000);
|
||||
vUsartPrintf(USART3, "USART3 Printf Test %d\r\n", 123);
|
||||
vPc13LedOff();
|
||||
vTaskDelay(1000);
|
||||
}
|
||||
}
|
||||
|
||||
void vTaskWifiConnection(void *pvParameters)
|
||||
/**
|
||||
* @brief <20><>ʼ<EFBFBD><CABC>Wi-Fiģ<69><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note ͨ<><CDA8>ESP8266ģ<36><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>MQTTЭ<54><D0AD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD>
|
||||
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD><D8B6>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD><D6B8>
|
||||
* @retval None
|
||||
*/
|
||||
void vTaskWifiNetWorkInit(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);
|
||||
/* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ַ<EFBFBD> */
|
||||
vUsartPrintf(USART2, "AT+CWJAP=\"Exploration\",\"IPSK25em.\"\r\n");
|
||||
while (1)
|
||||
{
|
||||
|
||||
ucRetvalQueueWifiSt = xQueueReceive(xQueueUsart2IrqHdlr, &ucBufferQueueRec, pdMS_TO_TICKS(30));
|
||||
/* code */
|
||||
if (ucRetvalQueueWifiSt == pdTRUE)
|
||||
vEsp8266GpioConfig();
|
||||
vEsp8266AtTest();
|
||||
if (bEsp8266NetModeChoose(STA) == pdTRUE)
|
||||
{
|
||||
vUsartSendString(USART1, "Set ESP8266 Net Mode Successfully.\r\n");
|
||||
} else
|
||||
{
|
||||
/* code */
|
||||
vUsartPrintf(USART3, (char *)&ucBufferQueueRec);
|
||||
vUsartSendString(USART1, "Set ESP8266 Net Mode Failed.\r\n");
|
||||
continue;
|
||||
}
|
||||
else
|
||||
if (bEsp8266JoinAp(ESP8266_APSSID, ESP8266_APPWD) == pdTRUE)
|
||||
{
|
||||
vUsartSendString(USART3, "Queue Receive failed!\r\n");
|
||||
vTaskDelay(300);
|
||||
vUsartSendString(USART1, "Wifi Join To AP Successfully.\r\n");
|
||||
} else
|
||||
{
|
||||
/* code */
|
||||
vUsartSendString(USART1, "Wifi Join To AP Failed.\r\n");
|
||||
continue;
|
||||
}
|
||||
#if (ESP8266_MQTT_SERVER_MODE == ALIYUN)
|
||||
if (bEsp8266MqttInit(ESP8266_ALIYUN_MQTT_USERNAME, ESP8266_ALIYUN_MQTT_PASSWORD, ESP8266_ALIYUN_MQTT_CLIENTID,
|
||||
ESP8266_ALIYUN_MQTT_IP, ESP8266_ALIYUN_MQTT_PORT, ESP8266_ALIYUN_MQTT_SUBSCRIBE_TOPIC) == pdTRUE)
|
||||
{
|
||||
/* code */
|
||||
vUsartSendString(USART1, "Aliyun MQTT Init Successfully.\r\n");
|
||||
/* ֪ͨMQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
xTaskNotifyGive(xTaskMqttPublishHdlr);
|
||||
xTaskNotifyGive(xTaskMqttSubscribeHdlr);
|
||||
vTaskDelete(NULL);
|
||||
} else
|
||||
{
|
||||
/* code */
|
||||
vUsartSendString(USART1, "Aliyun MQTT Init Failed.\r\n");
|
||||
continue;
|
||||
}
|
||||
#elif (ESP8266_MQTT_SERVER_MODE == EMQX)
|
||||
if (bEsp8266MqttInit(ESP8266_EMQX_MQTT_USERNAME, ESP8266_EMQX_MQTT_PASSWORD, ESP8266_EMQX_MQTT_CLIENTID,
|
||||
ESP8266_EMQX_MQTT_SERVER_IP, ESP8266_EMQX_MQTT_SERVER_PORT, ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == pdTRUE)
|
||||
{
|
||||
/* code */
|
||||
vUsartPrintf(USART1, "EMQX MQTT Init Successfully.\r\n");
|
||||
xTaskNotifyGive(xTaskMqttPublishHdlr);
|
||||
xTaskNotifyGive(xTaskMqttSubscribeHdlr);
|
||||
vTaskDelete(NULL);
|
||||
} else
|
||||
{
|
||||
/* code */
|
||||
vUsartSendString(USART1, "EMQX MQTT Init Failed.\r\n");
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note ͨ<><CDA8>ESP8266ģ<36><C4A3><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
|
||||
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD><D8B6>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD><D6B8>
|
||||
* @retval None
|
||||
*/
|
||||
void vTaskMqttPublish(void *pvParameters)
|
||||
{
|
||||
/* <20><><EFBFBD><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>պ<EFBFBD><D5BA><EFBFBD> */
|
||||
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
|
||||
char *pcJsonMsg = "{\"temperature\":23,\"humidity\":60}";
|
||||
while (1)
|
||||
{
|
||||
/* code */
|
||||
#if (ESP8266_MQTT_SERVER_MODE == ALIYUN)
|
||||
while (bMqttPublish(ESP8266_ALIYUN_MQTT_PUBLISH_TOPIC, pcJsonMsg) == pdTRUE)
|
||||
{
|
||||
/* code */
|
||||
vUsartSendString(USART1, "MQTT Publish Successfully.\r\n");
|
||||
}
|
||||
vUsartSendString(USART1, "MQTT Publish Failed.\r\n");
|
||||
vTaskDelay(2000);
|
||||
#elif (ESP8266_MQTT_SERVER_MODE == EMQX)
|
||||
while (bMqttPublish(ESP8266_EMQX_MQTT_PUBLISH_TOPIC, pcJsonMsg) == pdTRUE)
|
||||
{
|
||||
/* code */
|
||||
vUsartSendString(USART1, "MQTT Publish Successfully.\r\n");
|
||||
}
|
||||
vUsartSendString(USART1, "MQTT Publish Failed.\r\n");
|
||||
vTaskDelay(2000);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note ͨ<><CDA8>ESP8266ģ<36>鶩<EFBFBD><E9B6A9>MQTT<54><54><EFBFBD>Ⲣ<EFBFBD><E2B2A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD><D8B6>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD><D6B8>
|
||||
* @retval None
|
||||
*/
|
||||
void vTaskMqttSubscribe(void *pvParameters)
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
/* code */
|
||||
if (xMqttCmdParse(ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == MQTT_CMD_LED_ON)
|
||||
{
|
||||
/* code */
|
||||
vUsartPrintf(USART1, "Lights on\r\n");
|
||||
}
|
||||
else if (xMqttCmdParse(ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == MQTT_CMD_LED_OFF)
|
||||
{
|
||||
/* code */
|
||||
vUsartPrintf(USART1, "Lights off\r\n");
|
||||
}
|
||||
else if (xMqttCmdParse(ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == MQTT_CMD_FAN_ON)
|
||||
{
|
||||
/* code */
|
||||
vUsartPrintf(USART1, "Fan on\r\n");
|
||||
}
|
||||
else if (xMqttCmdParse(ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == MQTT_CMD_FAN_OFF)
|
||||
{
|
||||
/* code */
|
||||
vUsartPrintf(USART1, "Fan off\r\n");
|
||||
}
|
||||
else if (xMqttCmdParse(ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == MQTT_CMD_HUMIDIFIER_ON)
|
||||
{
|
||||
/* code */
|
||||
vUsartPrintf(USART1, "Humidifier on\r\n");
|
||||
}
|
||||
else if (xMqttCmdParse(ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == MQTT_CMD_HUMIDIFIER_OFF)
|
||||
{
|
||||
/* code */
|
||||
vUsartPrintf(USART1, "Humidifier off\r\n");
|
||||
}
|
||||
vTaskDelay(1000);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
* @note <20>ڴ˺<DAB4><CBBA><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊÿ<CEAA><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ķ<EFBFBD>ջ<EFBFBD><D5BB>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vCreateTasksList(void)
|
||||
{
|
||||
xTaskCreate(
|
||||
(TaskFunction_t ) vTaskStateLed,
|
||||
(TaskFunction_t ) vTaskWorkStatusLed,
|
||||
(char * ) "TaskName_StateLed",
|
||||
(configSTACK_DEPTH_TYPE) 256,
|
||||
(void * ) NULL,
|
||||
(UBaseType_t ) 2,
|
||||
(TaskHandle_t * ) &xTaskStateLedHdlr);
|
||||
(TaskHandle_t * ) &xTaskWorkStatusLedHdlr);
|
||||
xTaskCreate(
|
||||
(TaskFunction_t ) vTaskWifiConnection,
|
||||
(char * ) "TaskName_WifiConnectToAP",
|
||||
(TaskFunction_t ) vTaskWifiNetWorkInit,
|
||||
(char * ) "TaskName_WifiInitMQTTProtocol",
|
||||
(configSTACK_DEPTH_TYPE) 512,
|
||||
(void * ) NULL,
|
||||
(UBaseType_t ) 2,
|
||||
(TaskHandle_t * ) &xTaskWifiConnectHdlr);
|
||||
(TaskHandle_t * ) &xTaskWifiNwkInitHdlr);
|
||||
xTaskCreate(
|
||||
(TaskFunction_t ) vTaskMqttPublish,
|
||||
(char * ) "TaskName_MqttPublishTest",
|
||||
(configSTACK_DEPTH_TYPE) 512,
|
||||
(void * ) NULL,
|
||||
(UBaseType_t ) 2,
|
||||
(TaskHandle_t * ) &xTaskMqttPublishHdlr);
|
||||
xTaskCreate(
|
||||
(TaskFunction_t ) vTaskMqttSubscribe,
|
||||
(char * ) "TaskName_MqttSubscribe",
|
||||
(configSTACK_DEPTH_TYPE) 512,
|
||||
(void * ) NULL,
|
||||
(UBaseType_t ) 2,
|
||||
(TaskHandle_t * ) &xTaskMqttSubscribeHdlr);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
* @note <20>ڴ˺<DAB4><CBBA><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ķ<EFBFBD><C4B6>У<EFBFBD><D0A3><EFBFBD>Ϊÿ<CEAA><C3BF><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ij<EFBFBD><C4B3>Ⱥ<EFBFBD><C8BA><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vCreateQueuesList(void)
|
||||
{
|
||||
#if (ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 1)
|
||||
xQueueUsart1IrqHdlr = xQueueCreate(
|
||||
(UBaseType_t) 64,
|
||||
(UBaseType_t) sizeof(uint8_t *));
|
||||
#endif
|
||||
#if (ENABLE_FREERTOS_API_QUEUE_USART2_IRQ == 1)
|
||||
xQueueUsart2IrqHdlr = xQueueCreate(
|
||||
(UBaseType_t) 64,
|
||||
(UBaseType_t) sizeof(uint8_t *));
|
||||
(UBaseType_t) 1024,
|
||||
(UBaseType_t) sizeof(char *));
|
||||
#endif
|
||||
#if (ENABLE_FREERTOS_API_QUEUE_USART3_IRQ == 1)
|
||||
xQueueUsart3IrqHdlr = xQueueCreate(
|
||||
(UBaseType_t) 64,
|
||||
(UBaseType_t) sizeof(uint8_t *));
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
* @note <20>ڴ˺<DAB4><CBBA><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void vCreateSemaphoresList(void)
|
||||
{
|
||||
xSemWifiRetOkHdlr = xSemaphoreCreateBinary();
|
||||
xSemWifiRetErrHdlr = xSemaphoreCreateBinary();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><>ʼ<EFBFBD><CABC>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>ģ<EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F1A1A2B6>к<EFBFBD><D0BA>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param None
|
||||
* @retval int
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
vUsartInit(USART1, 115200);
|
||||
vUsartInit(USART2, 115200);
|
||||
vUsartInit(USART3, 115200);
|
||||
vDelayInit();
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user