feat: implement OneNet communication and ESP8266 integration
break: switch to c8t6
This commit is contained in:
183
Core/Inc/MqttKit.h
Normal file
183
Core/Inc/MqttKit.h
Normal file
@ -0,0 +1,183 @@
|
||||
#ifndef _MQTTKIT_H_
|
||||
#define _MQTTKIT_H_
|
||||
|
||||
|
||||
#include "MqttKit/Common.h"
|
||||
|
||||
|
||||
//=============================配置==============================
|
||||
//===========可以提供RTOS的内存管理方案,也可以使用C库的=========
|
||||
//RTOS
|
||||
#include <stdlib.h>
|
||||
|
||||
#define MQTT_MallocBuffer malloc
|
||||
|
||||
#define MQTT_FreeBuffer free
|
||||
//==========================================================
|
||||
|
||||
|
||||
#define MOSQ_MSB(A) (uint8)((A & 0xFF00) >> 8)
|
||||
#define MOSQ_LSB(A) (uint8)(A & 0x00FF)
|
||||
|
||||
|
||||
/*--------------------------------内存分配方案标志--------------------------------*/
|
||||
#define MEM_FLAG_NULL 0
|
||||
#define MEM_FLAG_ALLOC 1
|
||||
#define MEM_FLAG_STATIC 2
|
||||
|
||||
|
||||
typedef struct Buffer
|
||||
{
|
||||
|
||||
uint8 *_data; //协议数据
|
||||
|
||||
uint32 _len; //写入的数据长度
|
||||
|
||||
uint32 _size; //缓存总大小
|
||||
|
||||
uint8 _memFlag; //内存使用的方案:0-未分配 1-使用的动态分配 2-使用的固定内存
|
||||
|
||||
} MQTT_PACKET_STRUCTURE;
|
||||
|
||||
|
||||
/*--------------------------------固定头部消息类型--------------------------------*/
|
||||
enum MqttPacketType
|
||||
{
|
||||
|
||||
MQTT_PKT_CONNECT = 1, /**< 连接请求数据包 */
|
||||
MQTT_PKT_CONNACK, /**< 连接确认数据包 */
|
||||
MQTT_PKT_PUBLISH, /**< 发布数据数据包 */
|
||||
MQTT_PKT_PUBACK, /**< 发布确认数据包 */
|
||||
MQTT_PKT_PUBREC, /**< 发布数据已接收数据包,Qos 2时,回复MQTT_PKT_PUBLISH */
|
||||
MQTT_PKT_PUBREL, /**< 发布数据释放数据包, Qos 2时,回复MQTT_PKT_PUBREC */
|
||||
MQTT_PKT_PUBCOMP, /**< 发布完成数据包, Qos 2时,回复MQTT_PKT_PUBREL */
|
||||
MQTT_PKT_SUBSCRIBE, /**< 订阅数据包 */
|
||||
MQTT_PKT_SUBACK, /**< 订阅确认数据包 */
|
||||
MQTT_PKT_UNSUBSCRIBE, /**< 取消订阅数据包 */
|
||||
MQTT_PKT_UNSUBACK, /**< 取消订阅确认数据包 */
|
||||
MQTT_PKT_PINGREQ, /**< ping 数据包 */
|
||||
MQTT_PKT_PINGRESP, /**< ping 响应数据包 */
|
||||
MQTT_PKT_DISCONNECT, /**< 断开连接数据包 */
|
||||
|
||||
//新增
|
||||
|
||||
MQTT_PKT_CMD /**< 命令下发数据包 */
|
||||
|
||||
};
|
||||
|
||||
|
||||
/*--------------------------------MQTT QOS等级--------------------------------*/
|
||||
enum MqttQosLevel
|
||||
{
|
||||
|
||||
MQTT_QOS_LEVEL0, /**< 最多发送一次 */
|
||||
MQTT_QOS_LEVEL1, /**< 最少发送一次 */
|
||||
MQTT_QOS_LEVEL2 /**< 只发送一次 */
|
||||
|
||||
};
|
||||
|
||||
|
||||
/*--------------------------------MQTT 连接请求标志位,内部使用--------------------------------*/
|
||||
enum MqttConnectFlag
|
||||
{
|
||||
|
||||
MQTT_CONNECT_CLEAN_SESSION = 0x02,
|
||||
MQTT_CONNECT_WILL_FLAG = 0x04,
|
||||
MQTT_CONNECT_WILL_QOS0 = 0x00,
|
||||
MQTT_CONNECT_WILL_QOS1 = 0x08,
|
||||
MQTT_CONNECT_WILL_QOS2 = 0x10,
|
||||
MQTT_CONNECT_WILL_RETAIN = 0x20,
|
||||
MQTT_CONNECT_PASSWORD = 0x40,
|
||||
MQTT_CONNECT_USER_NAME = 0x80
|
||||
|
||||
};
|
||||
|
||||
|
||||
/*--------------------------------消息的packet ID,可自定义--------------------------------*/
|
||||
#define MQTT_PUBLISH_ID 10
|
||||
|
||||
#define MQTT_SUBSCRIBE_ID 20
|
||||
|
||||
#define MQTT_UNSUBSCRIBE_ID 30
|
||||
|
||||
|
||||
/*--------------------------------删包--------------------------------*/
|
||||
void MQTT_DeleteBuffer(MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
/*--------------------------------解包--------------------------------*/
|
||||
uint8 MQTT_UnPacketRecv(uint8 *dataPtr);
|
||||
|
||||
/*--------------------------------登录组包--------------------------------*/
|
||||
uint8 MQTT_PacketConnect(const int8 *user, const int8 *password, const int8 *devid,
|
||||
uint16 cTime, uint1 clean_session, uint1 qos,
|
||||
const int8 *will_topic, const int8 *will_msg, int32 will_retain,
|
||||
MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
/*--------------------------------断开连接组包--------------------------------*/
|
||||
uint1 MQTT_PacketDisConnect(MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
/*--------------------------------连接响应解包--------------------------------*/
|
||||
uint8 MQTT_UnPacketConnectAck(uint8 *rev_data);
|
||||
|
||||
/*--------------------------------数据点上传组包--------------------------------*/
|
||||
uint1 MQTT_PacketSaveData(const int8 *devid, int16 send_len, int8 *type_bin_head, uint8 type, MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
/*--------------------------------二进制文件上传组包--------------------------------*/
|
||||
uint1 MQTT_PacketSaveBinData(const int8 *name, int16 file_len, MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
/*--------------------------------命令下发解包--------------------------------*/
|
||||
uint8 MQTT_UnPacketCmd(uint8 *rev_data, int8 **cmdid, int8 **req, uint16 *req_len);
|
||||
|
||||
/*--------------------------------命令回复组包--------------------------------*/
|
||||
uint1 MQTT_PacketCmdResp(const int8 *cmdid, const int8 *req, MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
/*--------------------------------订阅主题组包--------------------------------*/
|
||||
uint8 MQTT_PacketSubscribe(uint16 pkt_id, enum MqttQosLevel qos, const int8 *topics[], uint8 topics_cnt, MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
/*--------------------------------订阅主题回复解包--------------------------------*/
|
||||
uint8 MQTT_UnPacketSubscribe(uint8 *rev_data);
|
||||
|
||||
/*--------------------------------取消订阅组包--------------------------------*/
|
||||
uint8 MQTT_PacketUnSubscribe(uint16 pkt_id, const int8 *topics[], uint8 topics_cnt, MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
/*--------------------------------取消订阅回复解包--------------------------------*/
|
||||
uint1 MQTT_UnPacketUnSubscribe(uint8 *rev_data);
|
||||
|
||||
/*--------------------------------发布主题组包--------------------------------*/
|
||||
uint8 MQTT_PacketPublish(uint16 pkt_id, const int8 *topic,
|
||||
const int8 *payload, uint32 payload_len,
|
||||
enum MqttQosLevel qos, int32 retain, int32 own,
|
||||
MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
/*--------------------------------发布消息回复解包--------------------------------*/
|
||||
uint8 MQTT_UnPacketPublish(uint8 *rev_data, int8 **topic, uint16 *topic_len, int8 **payload, uint16 *payload_len, uint8 *qos, uint16 *pkt_id);
|
||||
|
||||
/*--------------------------------发布消息的Ack组包--------------------------------*/
|
||||
uint1 MQTT_PacketPublishAck(uint16 pkt_id, MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
/*--------------------------------发布消息的Ack解包--------------------------------*/
|
||||
uint1 MQTT_UnPacketPublishAck(uint8 *rev_data);
|
||||
|
||||
/*--------------------------------发布消息的Rec组包--------------------------------*/
|
||||
uint1 MQTT_PacketPublishRec(uint16 pkt_id, MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
/*--------------------------------发布消息的Rec解包--------------------------------*/
|
||||
uint1 MQTT_UnPacketPublishRec(uint8 *rev_data);
|
||||
|
||||
/*--------------------------------发布消息的Rel组包--------------------------------*/
|
||||
uint1 MQTT_PacketPublishRel(uint16 pkt_id, MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
/*--------------------------------发布消息的Rel解包--------------------------------*/
|
||||
uint1 MQTT_UnPacketPublishRel(uint8 *rev_data, uint16 pkt_id);
|
||||
|
||||
/*--------------------------------发布消息的Comp组包--------------------------------*/
|
||||
uint1 MQTT_PacketPublishComp(uint16 pkt_id, MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
/*--------------------------------发布消息的Comp解包--------------------------------*/
|
||||
uint1 MQTT_UnPacketPublishComp(uint8 *rev_data);
|
||||
|
||||
/*--------------------------------心跳请求组包--------------------------------*/
|
||||
uint1 MQTT_PacketPing(MQTT_PACKET_STRUCTURE *mqttPacket);
|
||||
|
||||
|
||||
#endif
|
17
Core/Inc/MqttKit/common.h
Normal file
17
Core/Inc/MqttKit/common.h
Normal file
@ -0,0 +1,17 @@
|
||||
#ifndef __COMMON_H__
|
||||
#define __COMMON_H__
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* Type Definition Macros */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
typedef _Bool uint1;
|
||||
typedef unsigned char uint8;
|
||||
typedef char int8;
|
||||
typedef unsigned short uint16;
|
||||
typedef short int16;
|
||||
typedef unsigned int uint32;
|
||||
typedef int int32;
|
||||
typedef unsigned int size_t;
|
||||
|
||||
#endif /* __COMMON_H__ */
|
15
Core/Inc/OneNet.h
Normal file
15
Core/Inc/OneNet.h
Normal file
@ -0,0 +1,15 @@
|
||||
#ifndef _ONENET_H_
|
||||
#define _ONENET_H_
|
||||
|
||||
|
||||
_Bool OneNet_DevLink(void);
|
||||
|
||||
void OneNet_SendData(void);
|
||||
|
||||
void OneNet_RevPro(unsigned char* cmd);
|
||||
|
||||
void OneNET_Subscribe(void);
|
||||
|
||||
uint8_t onenet_state();
|
||||
|
||||
#endif
|
18
Core/Inc/esp8266.h
Normal file
18
Core/Inc/esp8266.h
Normal file
@ -0,0 +1,18 @@
|
||||
#ifndef _ESP8266_H_
|
||||
#define _ESP8266_H_
|
||||
|
||||
|
||||
#define REV_OK 0 //接收完成标志
|
||||
#define REV_WAIT 1 //接收未完成标志
|
||||
|
||||
|
||||
void ESP8266_Init(void);
|
||||
|
||||
void ESP8266_Clear(void);
|
||||
|
||||
void ESP8266_SendData(unsigned char* data, unsigned short len);
|
||||
|
||||
unsigned char* ESP8266_GetIPD(unsigned short timeOut);
|
||||
|
||||
|
||||
#endif
|
@ -56,6 +56,8 @@ void DebugMon_Handler(void);
|
||||
void PendSV_Handler(void);
|
||||
void SysTick_Handler(void);
|
||||
void EXTI9_5_IRQHandler(void);
|
||||
void USART1_IRQHandler(void);
|
||||
void USART2_IRQHandler(void);
|
||||
void EXTI15_10_IRQHandler(void);
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
|
1399
Core/Src/MqttKit.c
Normal file
1399
Core/Src/MqttKit.c
Normal file
File diff suppressed because it is too large
Load Diff
236
Core/Src/OneNet.c
Normal file
236
Core/Src/OneNet.c
Normal file
@ -0,0 +1,236 @@
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include "esp8266.h"
|
||||
#include "main.h"
|
||||
#include "onenet.h"
|
||||
#include "mqttkit.h"
|
||||
#include "stm32f1xx_hal_gpio.h"
|
||||
// #include "main.h"
|
||||
|
||||
#define PRODUCT_ID "zzS53oqy5l"
|
||||
#define DEVICE_ID "ESP_67EAF3"
|
||||
#define SIGNATURE "version=2018-10-31&res=products%2FzzS53oqy5l%2Fdevices%2FESP_67EAF3&et=1766658508&method=md5&sign=r2rPhQdTZ3vpkxJTbgN5NQ%3D%3D"
|
||||
|
||||
|
||||
extern unsigned char esp8266_buf[128];
|
||||
|
||||
|
||||
//==========================================================
|
||||
// 函数名称: OneNet_DevLink
|
||||
//
|
||||
// 函数功能: 与onenet创建连接
|
||||
//
|
||||
// 入口参数: 无
|
||||
//
|
||||
// 返回参数: 1-成功 0-失败
|
||||
//
|
||||
// 说明: 与onenet平台建立连接
|
||||
//==========================================================
|
||||
_Bool OneNet_DevLink(void)
|
||||
{
|
||||
MQTT_PACKET_STRUCTURE mqttPacket = {NULL, 0, 0, 0}; //协议包
|
||||
|
||||
unsigned char* dataPtr;
|
||||
|
||||
_Bool status = 1;
|
||||
|
||||
// printf("OneNet_DevLink\r\nPROID: %s\tAUIF: %s\tDEVID:%s\r\n", PRODUCT_ID, SIGNATURE, DEVICE_ID);
|
||||
|
||||
if (MQTT_PacketConnect(PRODUCT_ID, SIGNATURE, DEVICE_ID, 256, 1, MQTT_QOS_LEVEL0, NULL, NULL, 0, &mqttPacket) == 0)
|
||||
{
|
||||
ESP8266_SendData(mqttPacket._data, mqttPacket._len); //上传平台
|
||||
|
||||
dataPtr = ESP8266_GetIPD(250); //等待平台响应
|
||||
if (dataPtr != NULL)
|
||||
{
|
||||
if (MQTT_UnPacketRecv(dataPtr) == MQTT_PKT_CONNACK)
|
||||
{
|
||||
switch (MQTT_UnPacketConnectAck(dataPtr))
|
||||
{
|
||||
case 0:
|
||||
status = 0;
|
||||
break;
|
||||
|
||||
// case 1: printf("WARN: 连接失败:协议错误\r\n");
|
||||
// break;
|
||||
// case 2: printf("WARN: 连接失败:非法的clientid\r\n");
|
||||
// break;
|
||||
// case 3: printf("WARN: 连接失败:服务器失败\r\n");
|
||||
// break;
|
||||
// case 4: printf("WARN: 连接失败:用户名或密码错误\r\n");
|
||||
// break;
|
||||
// case 5: printf("WARN: 连接失败:非法链接(比如token非法)\r\n");
|
||||
// break;
|
||||
//
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MQTT_DeleteBuffer(&mqttPacket); //删包
|
||||
}
|
||||
// else
|
||||
// printf("WARN: MQTT_PacketConnect Failed\r\n");
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
unsigned char OneNet_FillBuf(char* buf)
|
||||
{
|
||||
char text[48];
|
||||
|
||||
strcpy(buf, "{\"id\":\"1743082944\",\"params\":{");
|
||||
|
||||
memset(text, 0, sizeof(text));
|
||||
sprintf(text, "\"volt\":{\"value\":%f},", 218.3);
|
||||
strcat(buf, text);
|
||||
|
||||
memset(text, 0, sizeof(text));
|
||||
sprintf(text, "\"output\":{\"value\":%s}", HAL_GPIO_ReadPin(RELAY1_GPIO_Port, RELAY1_Pin) == GPIO_PIN_RESET ? "true" : "false");
|
||||
strcat(buf, text);
|
||||
|
||||
strcat(buf, "}}");
|
||||
return strlen(buf);
|
||||
}
|
||||
|
||||
//==========================================================
|
||||
// 函数名称: OneNet_SendData
|
||||
//
|
||||
// 函数功能: 上传数据到平台
|
||||
//
|
||||
// 入口参数: type:发送数据的格式
|
||||
//
|
||||
// 返回参数: 无
|
||||
//
|
||||
// 说明:
|
||||
//==========================================================
|
||||
|
||||
void OneNet_SendData(void)
|
||||
{
|
||||
MQTT_PACKET_STRUCTURE mqttPacket = {NULL, 0, 0, 0}; //协议包
|
||||
|
||||
char buf[128];
|
||||
|
||||
short body_len = 0, i = 0;
|
||||
memset(buf, 0, sizeof(buf)); //清空数组内容
|
||||
|
||||
body_len = OneNet_FillBuf(buf); //获取当前需要发送的数据流的总长度
|
||||
|
||||
if (body_len)
|
||||
{
|
||||
if (MQTT_PacketSaveData(DEVICE_ID, body_len, NULL, 5, &mqttPacket) == 0) //封包
|
||||
{
|
||||
for (; i < body_len; i++)
|
||||
{
|
||||
mqttPacket._data[mqttPacket._len++] = buf[i];
|
||||
}
|
||||
ESP8266_SendData(mqttPacket._data, mqttPacket._len); //上传数据到平台
|
||||
MQTT_DeleteBuffer(&mqttPacket); //删包
|
||||
}
|
||||
else;
|
||||
// printf( "WARN:EDP_NewBuffer Failed\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
void OneNET_Subscribe(void)
|
||||
{
|
||||
|
||||
MQTT_PACKET_STRUCTURE mqtt_packet = {NULL, 0, 0, 0}; //协议包
|
||||
|
||||
char topic_buf[56];
|
||||
const char *topic = topic_buf;
|
||||
|
||||
snprintf(topic_buf, sizeof(topic_buf), "$sys/%s/%s/thing/property/set", PRODUCT_ID, DEVICE_ID);
|
||||
|
||||
// printf("Subscribe Topic: %s\r\n", topic_buf);
|
||||
|
||||
if(MQTT_PacketSubscribe(MQTT_SUBSCRIBE_ID, MQTT_QOS_LEVEL0, &topic, 1, &mqtt_packet) == 0)
|
||||
{
|
||||
ESP8266_SendData(mqtt_packet._data, mqtt_packet._len); //向平台发送订阅请求
|
||||
|
||||
MQTT_DeleteBuffer(&mqtt_packet); //删包
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//==========================================================
|
||||
// 函数名称: OneNet_RevPro
|
||||
//
|
||||
// 函数功能: 平台返回数据检测
|
||||
//
|
||||
// 入口参数: dataPtr:平台返回的数据
|
||||
//
|
||||
// 返回参数: 无
|
||||
//
|
||||
// 说明:
|
||||
//==========================================================
|
||||
void OneNet_RevPro(unsigned char *cmd)
|
||||
{
|
||||
|
||||
char *req_payload = NULL;
|
||||
char *cmdid_topic = NULL;
|
||||
|
||||
unsigned short topic_len = 0;
|
||||
unsigned short req_len = 0;
|
||||
|
||||
unsigned char qos = 0;
|
||||
static unsigned short pkt_id = 0;
|
||||
|
||||
unsigned char type = 0;
|
||||
|
||||
short result = 0;
|
||||
|
||||
char *dataPtr = NULL;
|
||||
char numBuf[10];
|
||||
int num = 0;
|
||||
type = MQTT_UnPacketRecv(cmd);
|
||||
switch(type)
|
||||
{
|
||||
case MQTT_PKT_PUBLISH: //接收的Publish消息
|
||||
|
||||
result = MQTT_UnPacketPublish(cmd, &cmdid_topic, &topic_len, &req_payload, &req_len, &qos, &pkt_id);
|
||||
// if(result == 0)
|
||||
// {
|
||||
// printf("%s\r\n", req_payload);
|
||||
// }
|
||||
break;
|
||||
|
||||
case MQTT_PKT_PUBACK: //发送Publish消息,平台回复的Ack
|
||||
|
||||
if(MQTT_UnPacketPublishAck(cmd) == 0)
|
||||
// UsartPrintf(USART_DEBUG, "Tips: MQTT Publish Send OK\r\n");
|
||||
|
||||
break;
|
||||
|
||||
case MQTT_PKT_SUBACK: //发送Subscribe消息的Ack
|
||||
|
||||
if(MQTT_UnPacketSubscribe(cmd) == 0)
|
||||
;
|
||||
// UsartPrintf(USART_DEBUG, "Tips: MQTT Subscribe OK\r\n");
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
result = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
ESP8266_Clear(); //清空缓存
|
||||
|
||||
if(result == -1)
|
||||
return;
|
||||
|
||||
if(type == MQTT_PKT_CMD || type == MQTT_PKT_PUBLISH)
|
||||
{
|
||||
MQTT_FreeBuffer(cmdid_topic);
|
||||
MQTT_FreeBuffer(req_payload);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
uint8_t onenet_state(){
|
||||
return OneNet_DevLink();
|
||||
}
|
256
Core/Src/esp8266.c
Normal file
256
Core/Src/esp8266.c
Normal file
@ -0,0 +1,256 @@
|
||||
// #include "stm32f103xb.h"
|
||||
|
||||
//网络设备驱动
|
||||
#include "esp8266.h"
|
||||
|
||||
//硬件驱动
|
||||
#include "main.h"
|
||||
#include "usart.h"
|
||||
|
||||
|
||||
//C库
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
#define ESP8266_WIFI_INFO "AT+CWJAP=\"Redmi K20 Pro Premium\",\"11223344\"\r\n"
|
||||
|
||||
#define ESP8266_ONENET_INFO "AT+CIPSTART=\"TCP\",\"183.230.40.96\",1883\r\n"
|
||||
|
||||
|
||||
unsigned char esp8266_buf[128];
|
||||
unsigned short esp8266_cnt = 0, esp8266_cntPre = 0;
|
||||
|
||||
void Usart_SendString(UART_HandleTypeDef* huart, unsigned char* str, unsigned short len)
|
||||
{
|
||||
unsigned short count = 0;
|
||||
|
||||
HAL_UART_Transmit(huart, (uint8_t*)str, len, 0xffff);
|
||||
while (HAL_UART_GetState(huart) == HAL_UART_STATE_BUSY_TX);
|
||||
}
|
||||
|
||||
//==========================================================
|
||||
// 函数名称: ESP8266_Clear
|
||||
//
|
||||
// 函数功能: 清空缓存
|
||||
//
|
||||
// 入口参数: 无
|
||||
//
|
||||
// 返回参数: 无
|
||||
//
|
||||
// 说明:
|
||||
//==========================================================
|
||||
void ESP8266_Clear(void)
|
||||
{
|
||||
memset(esp8266_buf, 0, sizeof(esp8266_buf));
|
||||
esp8266_cnt = 0;
|
||||
}
|
||||
|
||||
//==========================================================
|
||||
// 函数名称: ESP8266_WaitRecive
|
||||
//
|
||||
// 函数功能: 等待接收完成
|
||||
//
|
||||
// 入口参数: 无
|
||||
//
|
||||
// 返回参数: REV_OK-接收完成 REV_WAIT-接收超时未完成
|
||||
//
|
||||
// 说明: 循环调用检测是否接收完成
|
||||
//==========================================================
|
||||
_Bool ESP8266_WaitRecive(void)
|
||||
{
|
||||
if (esp8266_cnt == 0) //如果接收计数为0 则说明没有处于接收数据中,所以直接跳出,结束函数
|
||||
return REV_WAIT;
|
||||
|
||||
if (esp8266_cnt == esp8266_cntPre) //如果上一次的值和这次相同,则说明接收完毕
|
||||
{
|
||||
esp8266_cnt = 0; //清0接收计数
|
||||
|
||||
return REV_OK; //返回接收完成标志
|
||||
}
|
||||
|
||||
esp8266_cntPre = esp8266_cnt; //置为相同
|
||||
|
||||
return REV_WAIT; //返回接收未完成标志
|
||||
}
|
||||
|
||||
//==========================================================
|
||||
// 函数名称: ESP8266_SendCmd
|
||||
//
|
||||
// 函数功能: 发送命令
|
||||
//
|
||||
// 入口参数: cmd:命令
|
||||
// res:需要检查的返回指令
|
||||
//
|
||||
// 返回参数: 0-成功 1-失败
|
||||
//
|
||||
// 说明:
|
||||
//==========================================================
|
||||
_Bool ESP8266_SendCmd(char* cmd, char* res)
|
||||
{
|
||||
unsigned char timeOut = 200;
|
||||
|
||||
Usart_SendString(&huart2, (unsigned char*)cmd, strlen((const char*)cmd));
|
||||
|
||||
while (timeOut--)
|
||||
{
|
||||
if (ESP8266_WaitRecive() == REV_OK) //如果收到数据
|
||||
{
|
||||
if (strstr((const char*)esp8266_buf, res) != NULL) //如果检索到关键词
|
||||
{
|
||||
ESP8266_Clear(); //清空缓存
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
HAL_Delay(10);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
//==========================================================
|
||||
// 函数名称: ESP8266_SendData
|
||||
//
|
||||
// 函数功能: 发送数据
|
||||
//
|
||||
// 入口参数: data:数据
|
||||
// len:长度
|
||||
//
|
||||
// 返回参数: 无
|
||||
//
|
||||
// 说明:
|
||||
//==========================================================
|
||||
void ESP8266_SendData(unsigned char* data, unsigned short len)
|
||||
{
|
||||
char cmdBuf[32];
|
||||
|
||||
ESP8266_Clear(); //清空接收缓存
|
||||
sprintf(cmdBuf, "AT+CIPSEND=%d\r\n", len); //发送命令
|
||||
if (!ESP8266_SendCmd(cmdBuf, ">")) //收到‘>’时可以发送数据
|
||||
{
|
||||
Usart_SendString(&huart2, data, len); //发送设备连接请求数据
|
||||
}
|
||||
}
|
||||
|
||||
//==========================================================
|
||||
// 函数名称: ESP8266_GetIPD
|
||||
//
|
||||
// 函数功能: 获取平台返回的数据
|
||||
//
|
||||
// 入口参数: 等待的时间(乘以10ms)
|
||||
//
|
||||
// 返回参数: 平台返回的原始数据
|
||||
//
|
||||
// 说明: 不同网络设备返回的格式不同,需要去调试
|
||||
// 如ESP8266的返回格式为 "+IPD,x:yyy" x代表数据长度,yyy是数据内容
|
||||
//==========================================================
|
||||
unsigned char* ESP8266_GetIPD(unsigned short timeOut)
|
||||
{
|
||||
char* ptrIPD = NULL;
|
||||
|
||||
do
|
||||
{
|
||||
if (ESP8266_WaitRecive() == REV_OK) //如果接收完成
|
||||
{
|
||||
ptrIPD = strstr((char*)esp8266_buf, "IPD,"); //搜索“IPD”头
|
||||
if (ptrIPD == NULL) //如果没找到,可能是IPD头的延迟,还是需要等待一会,但不会超过设定的时间
|
||||
{
|
||||
//printf("\"IPD\" not found\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
ptrIPD = strchr(ptrIPD, ':'); //找到':'
|
||||
if (ptrIPD != NULL)
|
||||
{
|
||||
ptrIPD++;
|
||||
return (unsigned char*)(ptrIPD);
|
||||
}
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
HAL_Delay(5); //延时等待
|
||||
}
|
||||
while (timeOut--);
|
||||
|
||||
return NULL; //超时还未找到,返回空指针
|
||||
}
|
||||
|
||||
//==========================================================
|
||||
// 函数名称: ESP8266_Init
|
||||
//
|
||||
// 函数功能: 初始化ESP8266
|
||||
//
|
||||
// 入口参数: 无
|
||||
//
|
||||
// 返回参数: 无
|
||||
//
|
||||
// 说明:
|
||||
//==========================================================
|
||||
void ESP8266_Init(void)
|
||||
{
|
||||
// GPIO_InitTypeDef GPIO_Initure;
|
||||
//
|
||||
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
|
||||
|
||||
// //ESP8266复位引脚
|
||||
// GPIO_Initure.GPIO_Mode = GPIO_Mode_Out_PP;
|
||||
// GPIO_Initure.GPIO_Pin = GPIO_Pin_5; //GPIOB5-复位
|
||||
// GPIO_Initure.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
// GPIO_Init(GPIOB, &GPIO_Initure);
|
||||
//
|
||||
// GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_RESET);
|
||||
// HAL_Delay(250);
|
||||
// GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
|
||||
// HAL_Delay(500);
|
||||
|
||||
// HAL_GPIO_WritePin(ESP_RST_GPIO_Port,ESP_RST_Pin,GPIO_PIN_RESET);
|
||||
// HAL_Delay(250);
|
||||
// HAL_GPIO_WritePin(ESP_RST_GPIO_Port,ESP_RST_Pin,GPIO_PIN_SET);
|
||||
// HAL_Delay(500);
|
||||
|
||||
ESP8266_Clear();
|
||||
|
||||
// printf("1. AT\r\n");
|
||||
while (ESP8266_SendCmd("AT\r\n", "OK"))
|
||||
HAL_Delay(1000);
|
||||
|
||||
// printf("2. CWMODE\r\n");
|
||||
while (ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))
|
||||
HAL_Delay(1000);
|
||||
|
||||
// printf("3. CWJAP\r\n");
|
||||
while (ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))
|
||||
HAL_Delay(1000);
|
||||
|
||||
// printf("4. CIPSTART\r\n");
|
||||
while (ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
|
||||
HAL_Delay(1000);
|
||||
|
||||
// printf("5. ESP8266 Init OK\r\n");
|
||||
}
|
||||
|
||||
|
||||
//==========================================================
|
||||
// 函数名称: ESP8266_IRQHandler
|
||||
//
|
||||
// 函数功能: 串口2收发中断
|
||||
//
|
||||
// 入口参数: 无
|
||||
//
|
||||
// 返回参数: 无
|
||||
//
|
||||
|
||||
// 说明:
|
||||
//==========================================================
|
||||
//void ESP8266_IRQHandler(void)
|
||||
//{
|
||||
// if(esp8266_cnt >= sizeof(esp8266_buf))
|
||||
// {
|
||||
// esp8266_cnt = 0; //防止串口被刷爆
|
||||
// }
|
||||
// esp8266_buf[esp8266_cnt++] = USART1->DR;
|
||||
//}
|
@ -51,13 +51,16 @@ void MX_GPIO_Init(void)
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(RC522_RST_GPIO_Port, RC522_RST_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOB, RC522_CS_Pin|RELAY1_Pin, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(RC522_CS_GPIO_Port, RC522_CS_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(RELAY1_GPIO_Port, RELAY1_Pin, GPIO_PIN_SET);
|
||||
|
||||
/*Configure GPIO pin : LED0_Pin */
|
||||
GPIO_InitStruct.Pin = LED0_Pin;
|
||||
@ -73,12 +76,12 @@ void MX_GPIO_Init(void)
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(RC522_RST_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : RC522_CS_Pin RELAY1_Pin */
|
||||
GPIO_InitStruct.Pin = RC522_CS_Pin|RELAY1_Pin;
|
||||
/*Configure GPIO pin : RC522_CS_Pin */
|
||||
GPIO_InitStruct.Pin = RC522_CS_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
HAL_GPIO_Init(RC522_CS_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : KEY4_Pin KEY3_Pin KEY2_Pin */
|
||||
GPIO_InitStruct.Pin = KEY4_Pin|KEY3_Pin|KEY2_Pin;
|
||||
@ -92,6 +95,13 @@ void MX_GPIO_Init(void)
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
HAL_GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : RELAY1_Pin */
|
||||
GPIO_InitStruct.Pin = RELAY1_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(RELAY1_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/* EXTI interrupt init*/
|
||||
HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
|
||||
|
@ -73,7 +73,6 @@ void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
|
||||
*/
|
||||
GPIO_InitStruct.Pin = OLED_SCL_Pin|OLED_SDA_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
|
140
Core/Src/main.c
140
Core/Src/main.c
@ -30,6 +30,8 @@
|
||||
#include "retarget.h"
|
||||
#include "oled.h"
|
||||
#include "rc522.h"
|
||||
#include "esp8266.h"
|
||||
#include "OneNet.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
@ -50,6 +52,11 @@
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN PV */
|
||||
extern unsigned short esp8266_cnt;
|
||||
extern unsigned char esp8266_buf[128];
|
||||
uint8_t* dataPtr;
|
||||
uint8_t UART2_RxData;
|
||||
|
||||
uint8_t rf_status;
|
||||
uint8_t rf_card_type[3];
|
||||
uint8_t rf_card_id[5];
|
||||
@ -103,28 +110,60 @@ int main(void)
|
||||
/* Initialize all configured peripherals */
|
||||
MX_GPIO_Init();
|
||||
MX_I2C1_Init();
|
||||
MX_USART1_UART_Init();
|
||||
MX_SPI1_Init();
|
||||
MX_USART1_UART_Init();
|
||||
MX_USART2_UART_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
||||
// Retarget uart
|
||||
RetargetInit(&huart1);
|
||||
|
||||
// Init RC522
|
||||
MFRC_Init();
|
||||
PCD_Reset();
|
||||
|
||||
// Init OLED
|
||||
OLED_Init();
|
||||
OLED_Clear();
|
||||
|
||||
OLED_ShowString(0,0,"scanning...",12);
|
||||
OLED_ShowString(0,0,"initializing...",12);
|
||||
|
||||
HAL_UART_Receive_IT(&huart2, (uint8_t *) &UART2_RxData, 1);
|
||||
ESP8266_Init();
|
||||
while (OneNet_DevLink()) {}
|
||||
OneNET_Subscribe();
|
||||
|
||||
// Init RC522
|
||||
MFRC_Init();
|
||||
PCD_Reset();
|
||||
|
||||
OLED_ShowString(0,0,"OneNet online ",12);
|
||||
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
/* USER CODE BEGIN WHILE */
|
||||
while (1)
|
||||
{
|
||||
// if (!OneNet_DevLink())
|
||||
// {
|
||||
// OLED_ShowString(0,0,"OneNet online ",12);
|
||||
// HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);
|
||||
// OneNet_SendData();
|
||||
// HAL_Delay(1000);
|
||||
// ESP8266_Clear();
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// OLED_ShowString(0,0,"OneNet offline ",12);
|
||||
// HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);
|
||||
// }
|
||||
OneNet_SendData();
|
||||
HAL_Delay(1000);
|
||||
ESP8266_Clear();
|
||||
|
||||
dataPtr = ESP8266_GetIPD(0);
|
||||
if (dataPtr != NULL)
|
||||
{
|
||||
OneNet_RevPro(dataPtr);
|
||||
}
|
||||
|
||||
rf_status = PCD_Request(PICC_REQALL, rf_card_type);
|
||||
|
||||
if (!rf_status) {
|
||||
@ -135,9 +174,9 @@ int main(void)
|
||||
|
||||
if (!rf_status) {
|
||||
rf_status = PCD_ERR;
|
||||
printf(SEP);
|
||||
printf("[i] Card Type: %02X %02X %02X\r\n", rf_card_type[0], rf_card_type[1], rf_card_type[2]);
|
||||
printf("[i] Card ID : %02X-%02X-%02X-%02X\r\n", rf_card_id[0], rf_card_id[1], rf_card_id[2], rf_card_id[3]);
|
||||
// printf(SEP);
|
||||
// printf("[i] Card Type: %02X %02X %02X\r\n", rf_card_type[0], rf_card_type[1], rf_card_type[2]);
|
||||
// printf("[i] Card ID : %02X-%02X-%02X-%02X\r\n", rf_card_id[0], rf_card_id[1], rf_card_id[2], rf_card_id[3]);
|
||||
|
||||
OLED_ShowString(0, 2, "Typ:", 12);
|
||||
uint8_t card_type_buffer[9];
|
||||
@ -156,24 +195,24 @@ int main(void)
|
||||
rf_status = PCD_ERR;
|
||||
|
||||
rf_status = PCD_AuthState(PICC_AUTHENT1A, ADDR, KEY_A, rf_card_id);
|
||||
if(rf_status == PCD_OK)
|
||||
{
|
||||
printf("[*] Key A pass\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("[!] Key A verification failed\r\n");
|
||||
}
|
||||
// if(rf_status == PCD_OK)
|
||||
// {
|
||||
// printf("[*] Key A pass\r\n");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// printf("[!] Key A verification failed\r\n");
|
||||
// }
|
||||
|
||||
rf_status = PCD_AuthState(PICC_AUTHENT1B, ADDR, KEY_B, rf_card_id);
|
||||
if(rf_status == PCD_OK)
|
||||
{
|
||||
printf("[*] Key B pass\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("[!] Key B verification failed\r\n");
|
||||
}
|
||||
// if(rf_status == PCD_OK)
|
||||
// {
|
||||
// printf("[*] Key B pass\r\n");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// printf("[!] Key B verification failed\r\n");
|
||||
// }
|
||||
}
|
||||
|
||||
if(rf_status == PCD_OK)
|
||||
@ -181,19 +220,19 @@ int main(void)
|
||||
rf_status = PCD_ERR;
|
||||
rf_status = PCD_ReadBlock(ADDR, rf_data);
|
||||
|
||||
if(rf_status == PCD_OK)
|
||||
{
|
||||
printf("[+] Data in sector %d block %d: ", ADDR/4, ADDR%4);
|
||||
for(int i = 0; i < 16; i++)
|
||||
{
|
||||
printf("%02x", rf_data[i]);
|
||||
}
|
||||
printf("\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Read card failed\r\n");
|
||||
}
|
||||
// if(rf_status == PCD_OK)
|
||||
// {
|
||||
// printf("[+] Data in sector %d block %d: ", ADDR/4, ADDR%4);
|
||||
// for(int i = 0; i < 16; i++)
|
||||
// {
|
||||
// printf("%02x", rf_data[i]);
|
||||
// }
|
||||
// printf("\r\n");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// printf("Read card failed\r\n");
|
||||
// }
|
||||
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);
|
||||
HAL_Delay(3000);
|
||||
}
|
||||
@ -246,9 +285,30 @@ void SystemClock_Config(void)
|
||||
/* USER CODE BEGIN 4 */
|
||||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
|
||||
{
|
||||
if(GPIO_Pin == KEY1_Pin)
|
||||
if(GPIO_Pin == KEY1_Pin || GPIO_Pin == KEY2_Pin || GPIO_Pin == KEY3_Pin || GPIO_Pin == KEY4_Pin)
|
||||
{
|
||||
OLED_Clear();
|
||||
HAL_GPIO_TogglePin(RELAY1_GPIO_Port, RELAY1_Pin);
|
||||
if(HAL_GPIO_ReadPin(RELAY1_GPIO_Port, RELAY1_Pin) == GPIO_PIN_RESET)
|
||||
{
|
||||
OLED_ShowString(0, 6, "Relay1: ON ", 12);
|
||||
}
|
||||
else
|
||||
{
|
||||
OLED_ShowString(0, 6, "Relay1: OFF", 12);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
||||
{
|
||||
if (huart == &huart2)
|
||||
{
|
||||
if (esp8266_cnt >= sizeof(esp8266_buf))
|
||||
{
|
||||
esp8266_cnt = 0;
|
||||
}
|
||||
esp8266_buf[esp8266_cnt++] = UART2_RxData;
|
||||
HAL_UART_Receive_IT(&huart2, (uint8_t *)&UART2_RxData, 1);
|
||||
}
|
||||
}
|
||||
/* USER CODE END 4 */
|
||||
|
@ -55,7 +55,8 @@
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
|
||||
extern UART_HandleTypeDef huart1;
|
||||
extern UART_HandleTypeDef huart2;
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
/* USER CODE END EV */
|
||||
@ -212,6 +213,34 @@ void EXTI9_5_IRQHandler(void)
|
||||
/* USER CODE END EXTI9_5_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles USART1 global interrupt.
|
||||
*/
|
||||
void USART1_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN USART1_IRQn 0 */
|
||||
|
||||
/* USER CODE END USART1_IRQn 0 */
|
||||
HAL_UART_IRQHandler(&huart1);
|
||||
/* USER CODE BEGIN USART1_IRQn 1 */
|
||||
|
||||
/* USER CODE END USART1_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles USART2 global interrupt.
|
||||
*/
|
||||
void USART2_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN USART2_IRQn 0 */
|
||||
|
||||
/* USER CODE END USART2_IRQn 0 */
|
||||
HAL_UART_IRQHandler(&huart2);
|
||||
/* USER CODE BEGIN USART2_IRQn 1 */
|
||||
|
||||
/* USER CODE END USART2_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles EXTI line[15:10] interrupts.
|
||||
*/
|
||||
|
@ -113,6 +113,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/* USART1 interrupt Init */
|
||||
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(USART1_IRQn);
|
||||
/* USER CODE BEGIN USART1_MspInit 1 */
|
||||
|
||||
/* USER CODE END USART1_MspInit 1 */
|
||||
@ -140,6 +143,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/* USART2 interrupt Init */
|
||||
HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(USART2_IRQn);
|
||||
/* USER CODE BEGIN USART2_MspInit 1 */
|
||||
|
||||
/* USER CODE END USART2_MspInit 1 */
|
||||
@ -163,6 +169,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
|
||||
|
||||
/* USART1 interrupt Deinit */
|
||||
HAL_NVIC_DisableIRQ(USART1_IRQn);
|
||||
/* USER CODE BEGIN USART1_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END USART1_MspDeInit 1 */
|
||||
@ -181,6 +189,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
|
||||
|
||||
/* USART2 interrupt Deinit */
|
||||
HAL_NVIC_DisableIRQ(USART2_IRQn);
|
||||
/* USER CODE BEGIN USART2_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END USART2_MspDeInit 1 */
|
||||
|
@ -1,8 +1,8 @@
|
||||
/**
|
||||
*************** (C) COPYRIGHT 2017 STMicroelectronics ************************
|
||||
* @file startup_stm32f103x6.s
|
||||
* @file startup_stm32f103xb.s
|
||||
* @author MCD Application Team
|
||||
* @brief STM32F103x6 Devices vector table for Atollic toolchain.
|
||||
* @brief STM32F103xB Devices vector table for Atollic toolchain.
|
||||
* This module performs:
|
||||
* - Set the initial SP
|
||||
* - Set the initial PC == Reset_Handler,
|
||||
@ -174,16 +174,16 @@ g_pfnVectors:
|
||||
.word TIM1_CC_IRQHandler
|
||||
.word TIM2_IRQHandler
|
||||
.word TIM3_IRQHandler
|
||||
.word 0
|
||||
.word TIM4_IRQHandler
|
||||
.word I2C1_EV_IRQHandler
|
||||
.word I2C1_ER_IRQHandler
|
||||
.word 0
|
||||
.word 0
|
||||
.word I2C2_EV_IRQHandler
|
||||
.word I2C2_ER_IRQHandler
|
||||
.word SPI1_IRQHandler
|
||||
.word 0
|
||||
.word SPI2_IRQHandler
|
||||
.word USART1_IRQHandler
|
||||
.word USART2_IRQHandler
|
||||
.word 0
|
||||
.word USART3_IRQHandler
|
||||
.word EXTI15_10_IRQHandler
|
||||
.word RTC_Alarm_IRQHandler
|
||||
.word USBWakeUp_IRQHandler
|
||||
@ -194,8 +194,8 @@ g_pfnVectors:
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word BootRAM /* @0x108. This is for boot in RAM mode for
|
||||
STM32F10x Low Density devices.*/
|
||||
.word BootRAM /* @0x108. This is for boot in RAM mode for
|
||||
STM32F10x Medium Density devices. */
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
@ -322,21 +322,36 @@ g_pfnVectors:
|
||||
.weak TIM3_IRQHandler
|
||||
.thumb_set TIM3_IRQHandler,Default_Handler
|
||||
|
||||
.weak TIM4_IRQHandler
|
||||
.thumb_set TIM4_IRQHandler,Default_Handler
|
||||
|
||||
.weak I2C1_EV_IRQHandler
|
||||
.thumb_set I2C1_EV_IRQHandler,Default_Handler
|
||||
|
||||
.weak I2C1_ER_IRQHandler
|
||||
.thumb_set I2C1_ER_IRQHandler,Default_Handler
|
||||
|
||||
.weak I2C2_EV_IRQHandler
|
||||
.thumb_set I2C2_EV_IRQHandler,Default_Handler
|
||||
|
||||
.weak I2C2_ER_IRQHandler
|
||||
.thumb_set I2C2_ER_IRQHandler,Default_Handler
|
||||
|
||||
.weak SPI1_IRQHandler
|
||||
.thumb_set SPI1_IRQHandler,Default_Handler
|
||||
|
||||
.weak SPI2_IRQHandler
|
||||
.thumb_set SPI2_IRQHandler,Default_Handler
|
||||
|
||||
.weak USART1_IRQHandler
|
||||
.thumb_set USART1_IRQHandler,Default_Handler
|
||||
|
||||
.weak USART2_IRQHandler
|
||||
.thumb_set USART2_IRQHandler,Default_Handler
|
||||
|
||||
.weak USART3_IRQHandler
|
||||
.thumb_set USART3_IRQHandler,Default_Handler
|
||||
|
||||
.weak EXTI15_10_IRQHandler
|
||||
.thumb_set EXTI15_10_IRQHandler,Default_Handler
|
||||
|
||||
@ -346,3 +361,4 @@ g_pfnVectors:
|
||||
.weak USBWakeUp_IRQHandler
|
||||
.thumb_set USBWakeUp_IRQHandler,Default_Handler
|
||||
|
||||
|
Reference in New Issue
Block a user