换血大更新
This commit is contained in:
@@ -210,4 +210,70 @@ void bsp_IIC::IIC_Read(u8 id,u8 addr,u8* dat,u32 len){
|
||||
IIC_Stop();
|
||||
return;}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// bsp适配
|
||||
#ifdef _STM32_HAL_
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 构造函数
|
||||
//
|
||||
/**
|
||||
* @brief 构造STM32的IIC软件发生器
|
||||
*
|
||||
* @param *GPIOx_SCK SCK的端口
|
||||
* @param GPIO_Pin_SCK SCK的管口号
|
||||
* @param *GPIOx_SDA SDA的端口
|
||||
* @param GPIO_Pin_SDA SDA的管口号
|
||||
*/
|
||||
bsp_IIC_STM32::bsp_IIC_STM32(GPIO_TypeDef *GPIOx_SCK,uint16_t GPIO_Pin_SCK,GPIO_TypeDef *GPIOx_SDA,uint16_t GPIO_Pin_SDA){
|
||||
bsp_IIC_STM32::GPIOx_SCK=GPIOx_SCK;
|
||||
bsp_IIC_STM32::GPIO_Pin_SCK=GPIO_Pin_SCK;
|
||||
bsp_IIC_STM32::GPIOx_SDA=GPIOx_SDA;
|
||||
bsp_IIC_STM32::GPIO_Pin_SDA=GPIO_Pin_SDA;}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 适配程序
|
||||
//
|
||||
/**
|
||||
* @brief 时序中的延时
|
||||
* 在此处短暂延时
|
||||
*/
|
||||
void bsp_IIC_STM32::IIC_Delay(void) {
|
||||
u8 i = 0;
|
||||
while (++i);}
|
||||
/**
|
||||
* @brief 控制SCK管脚口
|
||||
*
|
||||
* @param var 此处有三个状态,IIC_SET置位管脚,IIC_RESET复位管脚
|
||||
* @return 当var为IIC_READ时返回管脚状态
|
||||
*/
|
||||
u8 bsp_IIC_STM32::IIC_SCK(u8 var) {
|
||||
if (var == IIC_RESET) {
|
||||
HAL_GPIO_WritePin(GPIOx_SCK, GPIO_Pin_SCK, GPIO_PIN_RESET);
|
||||
return 2;}
|
||||
else if (var == IIC_SET) {
|
||||
HAL_GPIO_WritePin(GPIOx_SCK, GPIO_Pin_SCK, GPIO_PIN_SET);
|
||||
return 2;}
|
||||
else {
|
||||
return HAL_GPIO_ReadPin(GPIOx_SCK, GPIO_Pin_SCK);
|
||||
}}
|
||||
/**
|
||||
* @brief 控制SDA管脚口
|
||||
* @param var 此处有三个状态,IIC_SET置位管脚,IIC_RESET复位管脚
|
||||
* @return 当var为IIC_READ时返回管脚状态
|
||||
*/
|
||||
u8 bsp_IIC_STM32::IIC_SDA(u8 var) {
|
||||
if (var == IIC_RESET) {
|
||||
HAL_GPIO_WritePin(GPIOx_SDA, GPIO_Pin_SDA, GPIO_PIN_RESET);
|
||||
return 2;}
|
||||
else if (var == IIC_SET) {
|
||||
HAL_GPIO_WritePin(GPIOx_SDA, GPIO_Pin_SDA, GPIO_PIN_SET);
|
||||
return 2;}
|
||||
else {
|
||||
return HAL_GPIO_ReadPin(GPIOx_SDA, GPIO_Pin_SDA);
|
||||
}}
|
||||
#endif
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
#ifdef __cplusplus
|
||||
#pragma once
|
||||
#include "User.h"
|
||||
#include "varint.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
@@ -91,5 +92,30 @@ class bsp_IIC{
|
||||
virtual void IIC_Delay(void) = 0;
|
||||
};
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// bsp适配
|
||||
#ifdef _STM32_HAL_
|
||||
#include "gpio.h"
|
||||
/**
|
||||
* @brief STM32版本的软件IIC
|
||||
* 需要使用构造函数初始化
|
||||
*/
|
||||
class bsp_IIC_STM32 :public bsp_IIC{
|
||||
public:
|
||||
bsp_IIC_STM32(GPIO_TypeDef *GPIOx_SCK,uint16_t GPIO_Pin_SCK,GPIO_TypeDef *GPIOx_SDA,uint16_t GPIO_Pin_SDA);
|
||||
protected:
|
||||
virtual u8 IIC_SCK(u8 var);
|
||||
virtual u8 IIC_SDA(u8 var);
|
||||
virtual void IIC_Delay(void);
|
||||
public:
|
||||
GPIO_TypeDef *GPIOx_SCK;
|
||||
uint16_t GPIO_Pin_SCK;
|
||||
GPIO_TypeDef *GPIOx_SDA;
|
||||
uint16_t GPIO_Pin_SDA;
|
||||
};
|
||||
#endif
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#endif
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bsp_OLED_STM32.cpp
|
||||
* @file bsp_OLED.cpp
|
||||
* @brief 在STM32下实现OLED通信
|
||||
* @mainpage 主要信息
|
||||
* @author Yuankang Liang(XerolySkinner)
|
||||
@@ -32,8 +32,7 @@
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include "bsp_IIC_STM32.h"
|
||||
#include "bsp_OLED_STM32.h"
|
||||
#include "bsp_OLED.h"
|
||||
extern const u8 OLED_WORD_ASCII[];
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
@@ -43,14 +42,14 @@ extern const u8 OLED_WORD_ASCII[];
|
||||
* @brief 发送一条指令给OLED
|
||||
* @param cmd 要发送的指令
|
||||
*/
|
||||
void bsp_STM32_OLED::Send_cmd(u8 cmd) {
|
||||
void bsp_OLED::Send_cmd(u8 cmd) {
|
||||
IIC_WriteOneByte(0x3C, 0x00, cmd);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 发送一条数据给OLED
|
||||
* @param dat 要发送的数据
|
||||
*/
|
||||
void bsp_STM32_OLED::Send_dat(u8 dat) {
|
||||
void bsp_OLED::Send_dat(u8 dat) {
|
||||
IIC_WriteOneByte(0x3C, 0x40, dat);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
@@ -58,14 +57,14 @@ void bsp_STM32_OLED::Send_dat(u8 dat) {
|
||||
* @param *dat 要发送的指令头
|
||||
* @param len 指令长度
|
||||
*/
|
||||
void bsp_STM32_OLED::Send_len_dat(u8* dat, u32 len) {
|
||||
void bsp_OLED::Send_len_dat(u8* dat, u32 len) {
|
||||
IIC_Write(0x3C, 0x40, (u8*)dat, len);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 光标定位行中的位置
|
||||
* @param column 设定的该行位置
|
||||
*/
|
||||
void bsp_STM32_OLED::Column_set(u8 column) {
|
||||
void bsp_OLED::Column_set(u8 column) {
|
||||
Send_cmd(0x10 | (column >> 4)); //设置列地址高位
|
||||
Send_cmd(0x00 | (column & 0x0f)); //设置列地址低位
|
||||
}
|
||||
@@ -74,14 +73,14 @@ void bsp_STM32_OLED::Column_set(u8 column) {
|
||||
* @brief 光标定位于一页
|
||||
* @param page 设定所处的页位置
|
||||
*/
|
||||
void bsp_STM32_OLED::Page_set(u8 page) {
|
||||
void bsp_OLED::Page_set(u8 page) {
|
||||
Send_cmd(0xb0 + page);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 全页绘制
|
||||
* @param dat 全页绘制的数据,0x00为清空,0xFF为全涂
|
||||
*/
|
||||
void bsp_STM32_OLED::Clear(u8 dat) {
|
||||
void bsp_OLED::Clear(u8 dat) {
|
||||
u8 page;
|
||||
for (page = 0; page < 8; page++) {
|
||||
Page_set(page);
|
||||
@@ -100,7 +99,7 @@ void bsp_STM32_OLED::Clear(u8 dat) {
|
||||
* @brief OLED绘图
|
||||
* @param *ptr_pic 图片数据的头
|
||||
*/
|
||||
void bsp_STM32_OLED::Picture_display(const u8* ptr_pic) {
|
||||
void bsp_OLED::Picture_display(const u8* ptr_pic) {
|
||||
u8 page;
|
||||
for (page = 0; page < (64 / 8); page++) {
|
||||
Page_set(page);
|
||||
@@ -120,7 +119,7 @@ void bsp_STM32_OLED::Picture_display(const u8* ptr_pic) {
|
||||
* @brief OLED反向绘图
|
||||
* @param *ptr_pic 图片数据的头
|
||||
*/
|
||||
void bsp_STM32_OLED::Picture_ReverseDisplay(const u8* ptr_pic) {
|
||||
void bsp_OLED::Picture_ReverseDisplay(const u8* ptr_pic) {
|
||||
u8 page;
|
||||
for (page = 0; page < (64 / 8); page++) {
|
||||
Page_set(page);
|
||||
@@ -142,7 +141,7 @@ void bsp_STM32_OLED::Picture_ReverseDisplay(const u8* ptr_pic) {
|
||||
* @param V 列数
|
||||
* @param word 所要显示的字符
|
||||
*/
|
||||
void bsp_STM32_OLED::Draw_ASCII(u32 H, u32 V, u8 word) {
|
||||
void bsp_OLED::Draw_ASCII(u32 H, u32 V, u8 word) {
|
||||
word -= 33;
|
||||
Page_set(V * 2);
|
||||
Column_set(H * 8);
|
||||
@@ -155,7 +154,7 @@ void bsp_STM32_OLED::Draw_ASCII(u32 H, u32 V, u8 word) {
|
||||
* @brief OLED初始化
|
||||
* 初始化显示屏的设置
|
||||
*/
|
||||
void bsp_STM32_OLED::Init(void) {
|
||||
void bsp_OLED::Init(void) {
|
||||
for (int i = 0; i < 25; i++)
|
||||
Send_cmd(OLED_init_cmd[i]);}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -22,7 +22,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bsp_OLED_STM32.h
|
||||
* @file bsp_OLED.h
|
||||
* @brief 在STM32下实现OLED通信
|
||||
* @mainpage 主要信息
|
||||
* @author Yuankang Liang(XerolySkinner)
|
||||
@@ -38,7 +38,7 @@
|
||||
// 头文件
|
||||
//
|
||||
#include "varint.h"
|
||||
#include "bsp_IIC_STM32.h"
|
||||
#include "bsp_IIC.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 数据声明
|
||||
@@ -78,14 +78,14 @@ const u8 OLED_init_cmd[25] = {
|
||||
/**
|
||||
* @brief 一个OLED设备,基于STM32使用IIC总线
|
||||
*/
|
||||
class bsp_STM32_OLED :
|
||||
class bsp_OLED :
|
||||
protected bsp_IIC_STM32{
|
||||
public:
|
||||
bsp_STM32_OLED(bsp_IIC_STM32 &IICS):bsp_IIC_STM32(
|
||||
bsp_OLED(bsp_IIC_STM32 &IICS):bsp_IIC_STM32(
|
||||
IICS.GPIOx_SCK,IICS.GPIO_Pin_SCK,
|
||||
IICS.GPIOx_SDA,IICS.GPIO_Pin_SDA
|
||||
){;};
|
||||
bsp_STM32_OLED(GPIO_TypeDef *GPIOx_SCK,uint16_t GPIO_Pin_SCK,GPIO_TypeDef *GPIOx_SDA,uint16_t GPIO_Pin_SDA):bsp_IIC_STM32(
|
||||
bsp_OLED(GPIO_TypeDef *GPIOx_SCK,uint16_t GPIO_Pin_SCK,GPIO_TypeDef *GPIOx_SDA,uint16_t GPIO_Pin_SDA):bsp_IIC_STM32(
|
||||
GPIOx_SCK,GPIO_Pin_SCK,GPIOx_SDA,GPIO_Pin_SDA
|
||||
){;};
|
||||
public:
|
||||
@@ -1,99 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2022 Yuankang Liang(XerolySkinner)
|
||||
#
|
||||
# 本软件按原样提供,无任何明示或暗示
|
||||
# 在任何情况下,作者都不承担任何损害赔偿责任
|
||||
#
|
||||
# 使用的许可声明:
|
||||
# 1. 不得歪曲本软件的来源,你不能声称你编写了原始软件.
|
||||
# 2. 免费授予以任何目的,前提是版权声明出现在所有副本中.
|
||||
# 并且版权声明和许可声明同时出现.
|
||||
# 3. 你有使用,复制,修改,分发,和销售本软件的许可.
|
||||
# 4. 如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的.
|
||||
# 5. 本通知不得从任何来源删除或更改.
|
||||
#
|
||||
# Yuankang Liang(XerolySkinner)
|
||||
# E-mail:zabbcccbbaz@163.com
|
||||
# QQ:2715099320
|
||||
# Mobile Phone:13005636215
|
||||
#
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bsp_IIC_STM32.cpp
|
||||
* @brief 实现针对STM32的软件IIC类
|
||||
* @mainpage 主要信息
|
||||
* @author Yuankang Liang(XerolySkinner)
|
||||
* @email zabbcccbbaz@163.com
|
||||
* @version V1.0.0
|
||||
* @date 2022-11-07 00:56
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 头文件
|
||||
#include "bsp_IIC_STM32.h"
|
||||
#include "gpio.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 构造函数
|
||||
//
|
||||
/**
|
||||
* @brief 构造STM32的IIC软件发生器
|
||||
*
|
||||
* @param *GPIOx_SCK SCK的端口
|
||||
* @param GPIO_Pin_SCK SCK的管口号
|
||||
* @param *GPIOx_SDA SDA的端口
|
||||
* @param GPIO_Pin_SDA SDA的管口号
|
||||
*/
|
||||
bsp_IIC_STM32::bsp_IIC_STM32(GPIO_TypeDef *GPIOx_SCK,uint16_t GPIO_Pin_SCK,GPIO_TypeDef *GPIOx_SDA,uint16_t GPIO_Pin_SDA){
|
||||
bsp_IIC_STM32::GPIOx_SCK=GPIOx_SCK;
|
||||
bsp_IIC_STM32::GPIO_Pin_SCK=GPIO_Pin_SCK;
|
||||
bsp_IIC_STM32::GPIOx_SDA=GPIOx_SDA;
|
||||
bsp_IIC_STM32::GPIO_Pin_SDA=GPIO_Pin_SDA;}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 适配程序
|
||||
//
|
||||
/**
|
||||
* @brief 时序中的延时
|
||||
* 在此处短暂延时
|
||||
*/
|
||||
void bsp_IIC_STM32::IIC_Delay(void) {
|
||||
u8 i = 0;
|
||||
while (++i);}
|
||||
/**
|
||||
* @brief 控制SCK管脚口
|
||||
*
|
||||
* @param var 此处有三个状态,IIC_SET置位管脚,IIC_RESET复位管脚
|
||||
* @return 当var为IIC_READ时返回管脚状态
|
||||
*/
|
||||
u8 bsp_IIC_STM32::IIC_SCK(u8 var) {
|
||||
if (var == IIC_RESET) {
|
||||
HAL_GPIO_WritePin(GPIOx_SCK, GPIO_Pin_SCK, GPIO_PIN_RESET);
|
||||
return 2;}
|
||||
else if (var == IIC_SET) {
|
||||
HAL_GPIO_WritePin(GPIOx_SCK, GPIO_Pin_SCK, GPIO_PIN_SET);
|
||||
return 2;}
|
||||
else {
|
||||
return HAL_GPIO_ReadPin(GPIOx_SCK, GPIO_Pin_SCK);
|
||||
}}
|
||||
/**
|
||||
* @brief 控制SDA管脚口
|
||||
* @param var 此处有三个状态,IIC_SET置位管脚,IIC_RESET复位管脚
|
||||
* @return 当var为IIC_READ时返回管脚状态
|
||||
*/
|
||||
u8 bsp_IIC_STM32::IIC_SDA(u8 var) {
|
||||
if (var == IIC_RESET) {
|
||||
HAL_GPIO_WritePin(GPIOx_SDA, GPIO_Pin_SDA, GPIO_PIN_RESET);
|
||||
return 2;}
|
||||
else if (var == IIC_SET) {
|
||||
HAL_GPIO_WritePin(GPIOx_SDA, GPIO_Pin_SDA, GPIO_PIN_SET);
|
||||
return 2;}
|
||||
else {
|
||||
return HAL_GPIO_ReadPin(GPIOx_SDA, GPIO_Pin_SDA);
|
||||
}}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2022 Yuankang Liang(XerolySkinner)
|
||||
#
|
||||
# 本软件按原样提供,无任何明示或暗示
|
||||
# 在任何情况下,作者都不承担任何损害赔偿责任
|
||||
#
|
||||
# 使用的许可声明:
|
||||
# 1. 不得歪曲本软件的来源,你不能声称你编写了原始软件.
|
||||
# 2. 免费授予以任何目的,前提是版权声明出现在所有副本中.
|
||||
# 并且版权声明和许可声明同时出现.
|
||||
# 3. 你有使用,复制,修改,分发,和销售本软件的许可.
|
||||
# 4. 如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的.
|
||||
# 5. 本通知不得从任何来源删除或更改.
|
||||
#
|
||||
# Yuankang Liang(XerolySkinner)
|
||||
# E-mail:zabbcccbbaz@163.com
|
||||
# QQ:2715099320
|
||||
# Mobile Phone:13005636215
|
||||
#
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bsp_IIC_STM32.h
|
||||
* @brief 实现针对STM32的软件IIC类
|
||||
* @mainpage 主要信息
|
||||
* @author Yuankang Liang(XerolySkinner)
|
||||
* @email zabbcccbbaz@163.com
|
||||
* @version V1.0.0
|
||||
* @date 2022-11-07 00:56
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
名字:bsp_IIC_STM32
|
||||
时间:20221107-0056
|
||||
程序员:梁源康
|
||||
说明:主程序
|
||||
*/
|
||||
#pragma once
|
||||
#ifdef __cplusplus
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 头文件
|
||||
#include "gpio.h"
|
||||
#include "varint.h"
|
||||
#include "bsp_IIC.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 类目
|
||||
/**
|
||||
* @brief STM32版本的软件IIC
|
||||
* 需要使用构造函数初始化
|
||||
*/
|
||||
class bsp_IIC_STM32 :public bsp_IIC{
|
||||
public:
|
||||
bsp_IIC_STM32(GPIO_TypeDef *GPIOx_SCK,uint16_t GPIO_Pin_SCK,GPIO_TypeDef *GPIOx_SDA,uint16_t GPIO_Pin_SDA);
|
||||
protected:
|
||||
u8 IIC_SCK(u8 var);
|
||||
u8 IIC_SDA(u8 var);
|
||||
virtual void IIC_Delay(void);
|
||||
public:
|
||||
GPIO_TypeDef *GPIOx_SCK;
|
||||
uint16_t GPIO_Pin_SCK;
|
||||
GPIO_TypeDef *GPIOx_SDA;
|
||||
uint16_t GPIO_Pin_SDA;
|
||||
};
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#endif
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2022 Yuankang Liang(XerolySkinner)
|
||||
#
|
||||
# 本软件按原样提供,无任何明示或暗示
|
||||
# 在任何情况下,作者都不承担任何损害赔偿责任
|
||||
#
|
||||
# 使用的许可声明:
|
||||
# 1. 不得歪曲本软件的来源,你不能声称你编写了原始软件.
|
||||
# 2. 免费授予以任何目的,前提是版权声明出现在所有副本中.
|
||||
# 并且版权声明和许可声明同时出现.
|
||||
# 3. 你有使用,复制,修改,分发,和销售本软件的许可.
|
||||
# 4. 如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的.
|
||||
# 5. 本通知不得从任何来源删除或更改.
|
||||
#
|
||||
# Yuankang Liang(XerolySkinner)
|
||||
# E-mail:zabbcccbbaz@163.com
|
||||
# QQ:2715099320
|
||||
# Mobile Phone:13005636215
|
||||
#
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bsp_ModBus_STM32.h
|
||||
* @brief ModBus通信基于STM32
|
||||
* @mainpage 主要信息
|
||||
* @author Yuankang Liang(XerolySkinner)
|
||||
* @email zabbcccbbaz@163.com
|
||||
* @version V1.0.0
|
||||
* @date 2022-11-22 01:28
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "bsp_ModBus.h"
|
||||
#include "usart.h"
|
||||
#include "varint.h"
|
||||
#ifdef __cplusplus
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 类目
|
||||
/**
|
||||
* @brief STM32用串口的ModBus发送器
|
||||
*/
|
||||
class bsp_ModBus_STM32:public bsp_ModBus_Tx {
|
||||
public:
|
||||
bsp_ModBus_STM32(UART_HandleTypeDef* huart,u8 ID,uint32_t Timeout):bsp_ModBus_Tx(ID){
|
||||
bsp_ModBus_STM32::huart = huart;
|
||||
bsp_ModBus_STM32::Timeout = Timeout;}
|
||||
protected:
|
||||
virtual void Transmit(u8 *dat, u16 len){
|
||||
HAL_UART_Transmit(huart,dat,len,0xFF);}
|
||||
private:
|
||||
UART_HandleTypeDef* huart;
|
||||
uint32_t Timeout;};
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#endif
|
||||
75
bsp_Device/bsp_UART/bsp_IDLEUART.cpp
Normal file
75
bsp_Device/bsp_UART/bsp_IDLEUART.cpp
Normal file
@@ -0,0 +1,75 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2022 Yuankang Liang(XerolySkinner)
|
||||
#
|
||||
# 本软件按原样提供,无任何明示或暗示
|
||||
# 在任何情况下,作者都不承担任何损害赔偿责任
|
||||
#
|
||||
# 使用的许可声明:
|
||||
# 1. 不得歪曲本软件的来源,你不能声称你编写了原始软件.
|
||||
# 2. 免费授予以任何目的,前提是版权声明出现在所有副本中.
|
||||
# 并且版权声明和许可声明同时出现.
|
||||
# 3. 你有使用,复制,修改,分发,和销售本软件的许可.
|
||||
# 4. 如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的.
|
||||
# 5. 本通知不得从任何来源删除或更改.
|
||||
#
|
||||
# Yuankang Liang(XerolySkinner)
|
||||
# E-mail:zabbcccbbaz@163.com
|
||||
# QQ:2715099320
|
||||
# Mobile Phone:13005636215
|
||||
#
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bsp_IDLEUART.cpp
|
||||
* @brief 空闲接收字符
|
||||
* @mainpage 主要信息
|
||||
* @author Yuankang Liang(XerolySkinner)
|
||||
* @email zabbcccbbaz@163.com
|
||||
* @version V1.0.0
|
||||
* @date Fri Jan 20 00:40:10 2023
|
||||
|
||||
*/
|
||||
#include "bsp_IDLEUART.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 类函数
|
||||
/**
|
||||
* @brief title
|
||||
* @param var vars
|
||||
* @return res
|
||||
*/
|
||||
void bsp_IDLEUART::init(void){
|
||||
HAL_TIM_Base_Stop_IT(htim);
|
||||
HAL_UART_Receive_IT(huart,&temp,1);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
void bsp_IDLEUART::callback_TIM(void){
|
||||
*buff='\0';
|
||||
buff=buffhead;
|
||||
HAL_TIM_Base_Stop_IT(htim);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
void bsp_IDLEUART::callback_UART(void){
|
||||
__HAL_TIM_CLEAR_IT(htim,TIM_IT_UPDATE);
|
||||
HAL_TIM_Base_Start_IT(htim);
|
||||
__HAL_TIM_SetCounter(htim,0);
|
||||
*(buff++)=temp;
|
||||
len++;
|
||||
HAL_UART_Receive_IT(huart,&temp,1);}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 构造函数
|
||||
bsp_IDLEUART::bsp_IDLEUART(UART_HandleTypeDef *huart,TIM_HandleTypeDef *htim):bsp_PrintArt_STM32(huart){
|
||||
bsp_IDLEUART::huart=huart;
|
||||
bsp_IDLEUART::htim=htim;
|
||||
len=0;
|
||||
buff=(u8*)malloc(128);
|
||||
buffhead=buff;}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
bsp_IDLEUART::bsp_IDLEUART(UART_HandleTypeDef *huart,TIM_HandleTypeDef *htim,u32 len):bsp_PrintArt_STM32(huart){
|
||||
bsp_IDLEUART::huart=huart;
|
||||
bsp_IDLEUART::htim=htim;
|
||||
len=0;
|
||||
buff=(u8*)malloc(len);
|
||||
buffhead=buff;}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
67
bsp_Device/bsp_UART/bsp_IDLEUART.h
Normal file
67
bsp_Device/bsp_UART/bsp_IDLEUART.h
Normal file
@@ -0,0 +1,67 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2022 Yuankang Liang(XerolySkinner)
|
||||
#
|
||||
# 本软件按原样提供,无任何明示或暗示
|
||||
# 在任何情况下,作者都不承担任何损害赔偿责任
|
||||
#
|
||||
# 使用的许可声明:
|
||||
# 1. 不得歪曲本软件的来源,你不能声称你编写了原始软件.
|
||||
# 2. 免费授予以任何目的,前提是版权声明出现在所有副本中.
|
||||
# 并且版权声明和许可声明同时出现.
|
||||
# 3. 你有使用,复制,修改,分发,和销售本软件的许可.
|
||||
# 4. 如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的.
|
||||
# 5. 本通知不得从任何来源删除或更改.
|
||||
#
|
||||
# Yuankang Liang(XerolySkinner)
|
||||
# E-mail:zabbcccbbaz@163.com
|
||||
# QQ:2715099320
|
||||
# Mobile Phone:13005636215
|
||||
#
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bsp_IDLEUART.h
|
||||
* @brief 空闲接收字符
|
||||
* @mainpage 主要信息
|
||||
* @author Yuankang Liang(XerolySkinner)
|
||||
* @email zabbcccbbaz@163.com
|
||||
* @version V1.0.0
|
||||
* @date Fri Jan 20 00:40:10 2023
|
||||
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifdef __cplusplus
|
||||
#include "varint.h"
|
||||
#include "bsp_PrintArt.h"
|
||||
#include "stdlib.h"
|
||||
#include "string.h"
|
||||
#include "usart.h"
|
||||
#include "tim.h"
|
||||
#define comcase(str,buff) if((strcmp(#str,(char*)(buff))==0))
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 类目
|
||||
/**
|
||||
* @brief TODO
|
||||
*/
|
||||
class bsp_IDLEUART:public bsp_PrintArt_STM32{
|
||||
public:
|
||||
bsp_IDLEUART(UART_HandleTypeDef *huart,TIM_HandleTypeDef *htim);
|
||||
bsp_IDLEUART(UART_HandleTypeDef *huart,TIM_HandleTypeDef *htim,u32 len);
|
||||
public:
|
||||
void init(void);
|
||||
void callback_TIM(void);
|
||||
void callback_UART(void);
|
||||
public:
|
||||
UART_HandleTypeDef *huart;
|
||||
TIM_HandleTypeDef *htim;
|
||||
u8* buff;
|
||||
u8* buffhead;
|
||||
u32 len;
|
||||
u8 temp;
|
||||
};
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#endif
|
||||
@@ -45,9 +45,9 @@
|
||||
* @brief 发送读取保存寄存器的指令
|
||||
* @param address 读取的地址
|
||||
* @param mem 读取的个数
|
||||
* @return ÎÞ·µ»ØÖµ
|
||||
* @return 该指令发送后,从机将回复的信息长度
|
||||
*/
|
||||
void bsp_ModBus_Tx::ReadKeepReg(u16 address, u16 mem) {
|
||||
u16 bsp_ModBus_Tx::ReadKeepReg(u16 address, u16 mem) {
|
||||
u8 dat[8];
|
||||
u16 crc;
|
||||
dat[0] = ID;
|
||||
@@ -59,15 +59,16 @@ void bsp_ModBus_Tx::ReadKeepReg(u16 address, u16 mem) {
|
||||
crc = CRC16_MODBUS(dat, 6);
|
||||
dat[6] = ((u8*)(&crc))[0];
|
||||
dat[7] = ((u8*)(&crc))[1];
|
||||
Transmit(dat,8);}
|
||||
Transmit(dat,8);
|
||||
return 5+mem;}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 发送读取输入寄存器的指令
|
||||
* @param address 读取的地址
|
||||
* @param mem 读取的个数
|
||||
* @return ÎÞ·µ»ØÖµ
|
||||
* @return 该指令发送后,从机将回复的信息长度
|
||||
*/
|
||||
void bsp_ModBus_Tx::ReadInReg(u16 address, u16 mem) {
|
||||
u16 bsp_ModBus_Tx::ReadInReg(u16 address, u16 mem) {
|
||||
u8 dat[8];
|
||||
u16 crc;
|
||||
dat[0] = ID;
|
||||
@@ -79,15 +80,16 @@ void bsp_ModBus_Tx::ReadInReg(u16 address, u16 mem) {
|
||||
crc = CRC16_MODBUS(dat,6);
|
||||
dat[6] = ((u8*)(&crc))[0];
|
||||
dat[7] = ((u8*)(&crc))[1];
|
||||
Transmit(dat, 8);}
|
||||
Transmit(dat, 8);
|
||||
return 5+mem;}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 发送写一个寄存器的指令
|
||||
* @param address 写入的地址
|
||||
* @param var 写入的值
|
||||
* @return ÎÞ·µ»ØÖµ
|
||||
* @return 该指令发送后,从机将回复的信息长度
|
||||
*/
|
||||
void bsp_ModBus_Tx::WriteOneReg(u16 address, u16 var) {
|
||||
u16 bsp_ModBus_Tx::WriteOneReg(u16 address, u16 var) {
|
||||
u8 dat[8];
|
||||
u16 crc;
|
||||
dat[0] = ID;
|
||||
@@ -99,20 +101,21 @@ void bsp_ModBus_Tx::WriteOneReg(u16 address, u16 var) {
|
||||
crc = CRC16_MODBUS(dat, 6);
|
||||
dat[6] = ((u8*)(&crc))[0];
|
||||
dat[7] = ((u8*)(&crc))[1];
|
||||
Transmit(dat, 8);}
|
||||
Transmit(dat, 8);
|
||||
return 8;}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 发送写多个寄存器的指令
|
||||
* @param address 写入的地址
|
||||
* @param mem 写入的个数
|
||||
* @param *var 待写入数据的缓冲区
|
||||
* @return ÎÞ·µ»ØÖµ
|
||||
* @return 该指令发送后,从机将回复的信息长度
|
||||
* @note 简单通信建议使用WriteRegsVar
|
||||
*/
|
||||
void bsp_ModBus_Tx::WriteRegs(u16 address,u16 mem,u16* var) {
|
||||
u16 bsp_ModBus_Tx::WriteRegs(u16 address,u16 mem,u16* var) {
|
||||
u8 bytes = 9 + mem * 2;
|
||||
u8* dat = (u8*)malloc(bytes);
|
||||
if (dat == NULL)return;
|
||||
if (dat == NULL)return 0;
|
||||
u16 crc;
|
||||
dat[0] = ID;
|
||||
dat[1] = Fun_W_Regs;
|
||||
@@ -129,7 +132,8 @@ void bsp_ModBus_Tx::WriteRegs(u16 address,u16 mem,u16* var) {
|
||||
dat[bytes - 2] = ((u8*)(&crc))[0];
|
||||
dat[bytes - 1] = ((u8*)(&crc))[1];
|
||||
Transmit(dat, bytes);
|
||||
free(dat);}
|
||||
free(dat);
|
||||
return 8;}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 发送写多个寄存器的指令
|
||||
@@ -137,15 +141,15 @@ void bsp_ModBus_Tx::WriteRegs(u16 address,u16 mem,u16* var) {
|
||||
* @param mem 写入的个数
|
||||
* @param var 写入的数据
|
||||
* 根据mem的数量决定此处数量
|
||||
* @return ÎÞ·µ»ØÖµ
|
||||
* @return 该指令发送后,从机将回复的信息长度
|
||||
*/
|
||||
void bsp_ModBus_Tx::WriteRegsVar(u16 address, u16 mem,...) {
|
||||
u16 bsp_ModBus_Tx::WriteRegsVar(u16 address, u16 mem,...) {
|
||||
va_list table;
|
||||
va_start(table,mem);
|
||||
u16 vars;
|
||||
u8 bytes = 9 + mem * 2;
|
||||
u8* dat = (u8*)malloc(bytes);
|
||||
if (dat == NULL)return;
|
||||
if (dat == NULL)return 0;
|
||||
u16 crc;
|
||||
dat[0] = ID;
|
||||
dat[1] = Fun_W_Regs;
|
||||
@@ -164,15 +168,16 @@ void bsp_ModBus_Tx::WriteRegsVar(u16 address, u16 mem,...) {
|
||||
dat[bytes - 1] = ((u8*)(&crc))[1];
|
||||
Transmit(dat, bytes);
|
||||
free(dat);
|
||||
va_end(table);}
|
||||
va_end(table);
|
||||
return 8;}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 发送读输出线圈的指令
|
||||
* @param address 读取的地址
|
||||
* @param mem 读取的个数
|
||||
* @return ÎÞ·µ»ØÖµ
|
||||
* @return 该指令发送后,从机将回复的信息长度
|
||||
*/
|
||||
void bsp_ModBus_Tx::ReadOutCoil(u16 address, u16 mem) {
|
||||
u16 bsp_ModBus_Tx::ReadOutCoil(u16 address, u16 mem) {
|
||||
u8 dat[8];
|
||||
u16 crc;
|
||||
dat[0] = ID;
|
||||
@@ -184,15 +189,16 @@ void bsp_ModBus_Tx::ReadOutCoil(u16 address, u16 mem) {
|
||||
crc = CRC16_MODBUS(dat, 6);
|
||||
dat[6] = ((u8*)(&crc))[0];
|
||||
dat[7] = ((u8*)(&crc))[1];
|
||||
Transmit(dat, 8);}
|
||||
Transmit(dat, 8);
|
||||
return 5+((mem/8)+((mem%8)!=0));}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 发送读输入线圈的指令
|
||||
* @param address 读取的地址
|
||||
* @param mem 读取的个数
|
||||
* @return ÎÞ·µ»ØÖµ
|
||||
* @return 该指令发送后,从机将回复的信息长度
|
||||
*/
|
||||
void bsp_ModBus_Tx::ReadInCoil(u16 address, u16 mem) {
|
||||
u16 bsp_ModBus_Tx::ReadInCoil(u16 address, u16 mem) {
|
||||
u8 dat[8];
|
||||
u16 crc;
|
||||
dat[0] = ID;
|
||||
@@ -204,7 +210,8 @@ void bsp_ModBus_Tx::ReadInCoil(u16 address, u16 mem) {
|
||||
crc = CRC16_MODBUS(dat, 6);
|
||||
dat[6] = ((u8*)(&crc))[0];
|
||||
dat[7] = ((u8*)(&crc))[1];
|
||||
Transmit(dat, 8);}
|
||||
Transmit(dat, 8);
|
||||
return 5+((mem/8)+((mem%8)!=0));}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 发送写入一个线圈的指令
|
||||
@@ -212,9 +219,9 @@ void bsp_ModBus_Tx::ReadInCoil(u16 address, u16 mem) {
|
||||
* @param state 写入的状态
|
||||
* 0:复位
|
||||
* 其他:置位
|
||||
* @return ÎÞ·µ»ØÖµ
|
||||
* @return 该指令发送后,从机将回复的信息长度
|
||||
*/
|
||||
void bsp_ModBus_Tx::WriteOneCoil(u16 address, u16 state){
|
||||
u16 bsp_ModBus_Tx::WriteOneCoil(u16 address, u16 state){
|
||||
u8 dat[8];
|
||||
u16 var = state ? 0xFF00 : 0x0000;
|
||||
u16 crc;
|
||||
@@ -227,20 +234,21 @@ void bsp_ModBus_Tx::WriteOneCoil(u16 address, u16 state){
|
||||
crc = CRC16_MODBUS(dat, 6);
|
||||
dat[6] = ((u8*)(&crc))[0];
|
||||
dat[7] = ((u8*)(&crc))[1];
|
||||
Transmit(dat, 8);}
|
||||
Transmit(dat, 8);
|
||||
return 8;}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 发送写多个线圈的指令
|
||||
* @param address 写入的地址
|
||||
* @param mem 写入的个数
|
||||
* @param *var 待写入数据的缓冲区
|
||||
* @return ÎÞ·µ»ØÖµ
|
||||
* @return 该指令发送后,从机将回复的信息长度
|
||||
* @note 简单通信建议使用WriteCoilsVar
|
||||
*/
|
||||
void bsp_ModBus_Tx::WriteCoils(u16 address, u16 mem, u8* var) {
|
||||
u16 bsp_ModBus_Tx::WriteCoils(u16 address, u16 mem, u8* var) {
|
||||
u8 bytes = (mem / 8) + (mem % 8 != 0) + 9;
|
||||
u8* dat = (u8*)malloc(bytes);
|
||||
if (dat == NULL)return;
|
||||
if (dat == NULL)return 0;
|
||||
u16 crc;
|
||||
dat[0] = ID;
|
||||
dat[1] = Fun_W_Coils;
|
||||
@@ -255,7 +263,8 @@ void bsp_ModBus_Tx::WriteCoils(u16 address, u16 mem, u8* var) {
|
||||
dat[bytes - 2] = ((u8*)(&crc))[0];
|
||||
dat[bytes - 1] = ((u8*)(&crc))[1];
|
||||
Transmit(dat, bytes);
|
||||
free(dat);}
|
||||
free(dat);
|
||||
return 9;}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 发送写多个线圈的指令
|
||||
@@ -263,16 +272,16 @@ void bsp_ModBus_Tx::WriteCoils(u16 address, u16 mem, u8* var) {
|
||||
* @param mem 写入的个数
|
||||
* @param var 写入的数据
|
||||
* 根据mem的数量决定此处数量
|
||||
* @return ÎÞ·µ»ØÖµ
|
||||
* @return 该指令发送后,从机将回复的信息长度
|
||||
*/
|
||||
void bsp_ModBus_Tx::WriteCoilsVar(u16 address, u16 mem,...) {
|
||||
u16 bsp_ModBus_Tx::WriteCoilsVar(u16 address, u16 mem,...) {
|
||||
va_list table;
|
||||
va_start(table,mem);
|
||||
u8 var=0;
|
||||
u16 crc;
|
||||
u8 bytes = (mem / 8) + (mem % 8 != 0) + 9;
|
||||
u8* dat = (u8*)malloc(bytes);
|
||||
if (dat == NULL)return;
|
||||
if (dat == NULL)return 0;
|
||||
dat[0] = ID;
|
||||
dat[1] = Fun_W_Coils;
|
||||
dat[2] = ((u8*)(&address))[1];
|
||||
@@ -292,7 +301,8 @@ void bsp_ModBus_Tx::WriteCoilsVar(u16 address, u16 mem,...) {
|
||||
dat[bytes - 1] = ((u8*)(&crc))[1];
|
||||
Transmit(dat, bytes);
|
||||
free(dat);
|
||||
va_end(table);}
|
||||
va_end(table);
|
||||
return 9;}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 类函数
|
||||
@@ -301,7 +311,8 @@ void bsp_ModBus_Tx::WriteCoilsVar(u16 address, u16 mem,...) {
|
||||
* @param *dat 待分析的缓冲区
|
||||
* @return 无返回值
|
||||
*/
|
||||
void bsp_ModBus_Rx::analysis(u8* dat) {
|
||||
u8 bsp_ModBus_Rx::analysis(u8* dat) {
|
||||
|
||||
u16 crc = 0;
|
||||
ID = dat[0];
|
||||
Func = dat[1];
|
||||
@@ -316,8 +327,9 @@ void bsp_ModBus_Rx::analysis(u8* dat) {
|
||||
Func == Fun_R_KeepReg ||
|
||||
Func == Fun_R_InReg) {
|
||||
crc = CRC16_MODBUS(dat, dat[2] + 3);
|
||||
crcts = ( ((u8*)(&crc))[1] == dat[dat[2] + 3] &&
|
||||
((u8*)(&crc))[0] == dat[dat[2] + 4]);}
|
||||
crcres = ( ((u8*)(&crc))[0] != dat[dat[2] + 3] ||
|
||||
((u8*)(&crc))[1] != dat[dat[2] + 4]);}
|
||||
// 开始解析
|
||||
switch (Func) {
|
||||
case Fun_R_OutCoil:
|
||||
// 输出线圈
|
||||
@@ -355,7 +367,8 @@ void bsp_ModBus_Rx::analysis(u8* dat) {
|
||||
break;
|
||||
default:
|
||||
// 写回显与其他
|
||||
break;}}
|
||||
break;}
|
||||
return crcres;}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 构造函数
|
||||
@@ -22,7 +22,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bsp_ModBus.h
|
||||
* @file bsp_ModBus.cpp
|
||||
* @brief ModBus通信函数
|
||||
* @mainpage 主要信息
|
||||
* @author Yuankang Liang(XerolySkinner)
|
||||
@@ -31,6 +31,7 @@
|
||||
* @date 2022-11-21 17:09
|
||||
*/
|
||||
#pragma once
|
||||
#include "User.h"
|
||||
#include "varint.h"
|
||||
#include "usart.h"
|
||||
#include <stdarg.h>
|
||||
@@ -59,17 +60,17 @@ class bsp_ModBus_Tx{
|
||||
public:
|
||||
bsp_ModBus_Tx(u8 ID);
|
||||
public:
|
||||
void ReadKeepReg(u16 address,u16 mem);
|
||||
void ReadInReg(u16 address, u16 mem);
|
||||
void WriteOneReg(u16 address, u16 var);
|
||||
void WriteRegs(u16 address, u16 mem, u16* var);
|
||||
void WriteRegsVar(u16 address, u16 mem,...);
|
||||
u16 ReadKeepReg(u16 address,u16 mem);
|
||||
u16 ReadInReg(u16 address, u16 mem);
|
||||
u16 WriteOneReg(u16 address, u16 var);
|
||||
u16 WriteRegs(u16 address, u16 mem, u16* var);
|
||||
u16 WriteRegsVar(u16 address, u16 mem,...);
|
||||
|
||||
void ReadOutCoil(u16 address,u16 mem);
|
||||
void ReadInCoil(u16 address, u16 mem);
|
||||
void WriteOneCoil(u16 address, u16 state);
|
||||
void WriteCoils(u16 address, u16 mem, u8* var);
|
||||
void WriteCoilsVar(u16 address, u16 mem,...);
|
||||
u16 ReadOutCoil(u16 address,u16 mem);
|
||||
u16 ReadInCoil(u16 address, u16 mem);
|
||||
u16 WriteOneCoil(u16 address, u16 state);
|
||||
u16 WriteCoils(u16 address, u16 mem, u8* var);
|
||||
u16 WriteCoilsVar(u16 address, u16 mem,...);
|
||||
protected:
|
||||
virtual void Transmit(u8 *dat, u16 len)=0;
|
||||
protected:
|
||||
@@ -84,11 +85,11 @@ class bsp_ModBus_Rx{
|
||||
bsp_ModBus_Rx(void);
|
||||
~bsp_ModBus_Rx(void);
|
||||
public:
|
||||
void analysis(u8* dat);
|
||||
u8 analysis(u8* dat);
|
||||
// 共有变量
|
||||
u8 ID; ///< 器件ID
|
||||
u8 Func; ///< 功能号
|
||||
u8 crcts; ///< CRC²âÊÔ
|
||||
u8 crcres;
|
||||
// 保持寄存器特有
|
||||
u16 *KeepRegDat;
|
||||
u8 KeepRegMem;
|
||||
@@ -102,4 +103,25 @@ class bsp_ModBus_Rx{
|
||||
u8* InCoilDat;
|
||||
u8 InCoilMem;};
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// bspÊÊÅä
|
||||
#ifdef _STM32_HAL_
|
||||
/**
|
||||
* @brief STM32Óô®¿ÚµÄModBus·¢ËÍÆ÷
|
||||
*/
|
||||
class bsp_ModBus_STM32_TX:public bsp_ModBus_Tx {
|
||||
public:
|
||||
bsp_ModBus_STM32_TX(UART_HandleTypeDef* huart,u8 ID,uint32_t Timeout):bsp_ModBus_Tx(ID){
|
||||
bsp_ModBus_STM32_TX::huart = huart;
|
||||
bsp_ModBus_STM32_TX::Timeout = Timeout;}
|
||||
protected:
|
||||
virtual void Transmit(u8 *dat, u16 len){
|
||||
HAL_UART_Transmit(huart,dat,len,Timeout);}
|
||||
private:
|
||||
UART_HandleTypeDef* huart;
|
||||
uint32_t Timeout;};
|
||||
#endif
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#endif
|
||||
74
bsp_Device/bsp_UART/bsp_PrintArt.cpp
Normal file
74
bsp_Device/bsp_UART/bsp_PrintArt.cpp
Normal file
@@ -0,0 +1,74 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2022 Yuankang Liang(XerolySkinner)
|
||||
#
|
||||
# 本软件按原样提供,无任何明示或暗示
|
||||
# 在任何情况下,作者都不承担任何损害赔偿责任
|
||||
#
|
||||
# 使用的许可声明:
|
||||
# 1. 不得歪曲本软件的来源,你不能声称你编写了原始软件.
|
||||
# 2. 免费授予以任何目的,前提是版权声明出现在所有副本中.
|
||||
# 并且版权声明和许可声明同时出现.
|
||||
# 3. 你有使用,复制,修改,分发,和销售本软件的许可.
|
||||
# 4. 如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的.
|
||||
# 5. 本通知不得从任何来源删除或更改.
|
||||
#
|
||||
# Yuankang Liang(XerolySkinner)
|
||||
# E-mail:zabbcccbbaz@163.com
|
||||
# QQ:2715099320
|
||||
# Mobile Phone:13005636215
|
||||
#
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bsp_PrintArt.cpp
|
||||
* @brief print重定向的艺术
|
||||
* @mainpage 主要信息
|
||||
* @author Yuankang Liang(XerolySkinner)
|
||||
* @email zabbcccbbaz@163.com
|
||||
* @version V1.0.0
|
||||
* @date 2022-11-27 02:15
|
||||
*/
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 类声明
|
||||
#include "bsp_PrintArt.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 类函数
|
||||
/**
|
||||
* @brief 重定向后的发射数据
|
||||
* @param format 格式化的字符串
|
||||
* @param ... 其参数
|
||||
* @return 成功与否
|
||||
*/
|
||||
int bsp_PrintArt::print(const char* format, ...) {
|
||||
u8* dat = (u8*)malloc(Bufflen); // 分配内存
|
||||
if(dat==NULL)return 1; // 判断分配成功与否
|
||||
u32 res; // 返回状态码
|
||||
va_list args; // 不定长变量
|
||||
va_start(args, format); // 初始化不定长变量
|
||||
res=vsprintf((char*)dat,(const char*)format, args); // 组合
|
||||
Transmit(dat, strlen((const char*)dat)); // 发送
|
||||
va_end(args); // 收尸
|
||||
free(dat); // 回收内存
|
||||
return res;}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 构造函数
|
||||
bsp_PrintArt::bsp_PrintArt(void) {
|
||||
Bufflen = 128;}
|
||||
/**
|
||||
* @brief 重定向后的发射数据
|
||||
* @param len 缓冲区大小
|
||||
*/
|
||||
bsp_PrintArt::bsp_PrintArt(u32 len) {
|
||||
Bufflen = len;}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
bsp_PrintArt_STM32::bsp_PrintArt_STM32(UART_HandleTypeDef *huart,u32 Bufflen):bsp_PrintArt(Bufflen){
|
||||
bsp_PrintArt_STM32::huart=huart;}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
bsp_PrintArt_STM32::bsp_PrintArt_STM32(UART_HandleTypeDef *huart):bsp_PrintArt(){
|
||||
bsp_PrintArt_STM32::huart=huart;}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -22,21 +22,56 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bsp_ModBus_STM32.cpp
|
||||
* @brief ModBus通信基于STM32
|
||||
* @file bsp_PrintArt.h
|
||||
* @brief print重定向的艺术
|
||||
* @mainpage Ö÷ÒªÐÅÏ¢
|
||||
* @author Yuankang Liang(XerolySkinner)
|
||||
* @email zabbcccbbaz@163.com
|
||||
* @version V1.0.0
|
||||
* @date 2022-11-22 01:28
|
||||
* @date 2022-11-27 02:15
|
||||
*/
|
||||
#pragma once
|
||||
#ifdef __cplusplus
|
||||
#include "User.h"
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "varint.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 头文件
|
||||
#include "bsp_ModBus_STM32.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 函数
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 类声明
|
||||
/**
|
||||
* @brief 创造一个print的重定向对象
|
||||
*/
|
||||
class bsp_PrintArt{
|
||||
public:
|
||||
bsp_PrintArt(void);
|
||||
bsp_PrintArt(u32 len);
|
||||
int print(const char* format, ...);
|
||||
private:
|
||||
u32 Bufflen;
|
||||
virtual void Transmit(u8* dat, u32 len) = 0;};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// bsp适配
|
||||
#ifdef _STM32_HAL_
|
||||
#include "usart.h"
|
||||
/**
|
||||
* @brief 创造一个print的重定向对象
|
||||
*/
|
||||
class bsp_PrintArt_STM32:public bsp_PrintArt{
|
||||
public:
|
||||
bsp_PrintArt_STM32(UART_HandleTypeDef *huart,u32 Bufflen);
|
||||
bsp_PrintArt_STM32(UART_HandleTypeDef *huart);
|
||||
private:
|
||||
UART_HandleTypeDef *huart;
|
||||
virtual void Transmit(u8* dat, u32 len){
|
||||
HAL_UART_Transmit(huart,dat,len,0xFF);
|
||||
}};
|
||||
#endif
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#endif
|
||||
425
bsp_Device/startup/startup_stm32g431xx.s
Normal file
425
bsp_Device/startup/startup_stm32g431xx.s
Normal file
@@ -0,0 +1,425 @@
|
||||
;*******************************************************************************
|
||||
;* @File Name : startup_stm32g431xx.s
|
||||
;* @Author : MCD Application Team
|
||||
;* @Brief : Vector table for MDK-ARM toolchain
|
||||
;*******************************************************************************
|
||||
;* Description : STM32G431xx Mainstream devices vector table for
|
||||
;* MDK-ARM toolchain.
|
||||
;* This module performs:
|
||||
;* - Set the initial SP
|
||||
;* - Set the initial PC == Reset_Handler
|
||||
;* - Set the vector table entries with the exceptions ISR address
|
||||
;* - Branches to __main in the C library (which eventually
|
||||
;* calls main()).
|
||||
;* After Reset the Cortex-M4 processor is in Thread mode,
|
||||
;* priority is Privileged, and the Stack is set to Main.
|
||||
;********************************************************************************
|
||||
;* @attention
|
||||
;*
|
||||
;* <h2><center>© Copyright (c) 2019 STMicroelectronics.
|
||||
;* All rights reserved.</center></h2>
|
||||
;*
|
||||
;* This software component is licensed by ST under BSD 3-Clause license,
|
||||
;* the "License"; You may not use this file except in compliance with the
|
||||
;* License. You may obtain a copy of the License at:
|
||||
;* opensource.org/licenses/BSD-3-Clause
|
||||
;*
|
||||
;*******************************************************************************
|
||||
;* <<< Use Configuration Wizard in Context Menu >>>
|
||||
;
|
||||
; Amount of memory (in bytes) allocated for Stack
|
||||
; Tailor this value to your application needs
|
||||
; <h> Stack Configuration
|
||||
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||
; </h>
|
||||
|
||||
Stack_Size EQU 0x400
|
||||
|
||||
AREA STACK, NOINIT, READWRITE, ALIGN=3
|
||||
Stack_Mem SPACE Stack_Size
|
||||
__initial_sp
|
||||
|
||||
|
||||
; <h> Heap Configuration
|
||||
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
|
||||
; </h>
|
||||
|
||||
Heap_Size EQU 0x200
|
||||
|
||||
AREA HEAP, NOINIT, READWRITE, ALIGN=3
|
||||
__heap_base
|
||||
Heap_Mem SPACE Heap_Size
|
||||
__heap_limit
|
||||
|
||||
PRESERVE8
|
||||
THUMB
|
||||
|
||||
|
||||
; Vector Table Mapped to Address 0 at Reset
|
||||
AREA RESET, DATA, READONLY
|
||||
EXPORT __Vectors
|
||||
EXPORT __Vectors_End
|
||||
EXPORT __Vectors_Size
|
||||
|
||||
__Vectors DCD __initial_sp ; Top of Stack
|
||||
DCD Reset_Handler ; Reset Handler
|
||||
DCD NMI_Handler ; NMI Handler
|
||||
DCD HardFault_Handler ; Hard Fault Handler
|
||||
DCD MemManage_Handler ; MPU Fault Handler
|
||||
DCD BusFault_Handler ; Bus Fault Handler
|
||||
DCD UsageFault_Handler ; Usage Fault Handler
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD SVC_Handler ; SVCall Handler
|
||||
DCD DebugMon_Handler ; Debug Monitor Handler
|
||||
DCD 0 ; Reserved
|
||||
DCD PendSV_Handler ; PendSV Handler
|
||||
DCD SysTick_Handler ; SysTick Handler
|
||||
|
||||
; External Interrupts
|
||||
DCD WWDG_IRQHandler ; Window WatchDog
|
||||
DCD PVD_PVM_IRQHandler ; PVD/PVM1/PVM2/PVM3/PVM4 through EXTI Line detection
|
||||
DCD RTC_TAMP_LSECSS_IRQHandler ; RTC, TAMP and RCC LSE_CSS through the EXTI line
|
||||
DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line
|
||||
DCD FLASH_IRQHandler ; FLASH
|
||||
DCD RCC_IRQHandler ; RCC
|
||||
DCD EXTI0_IRQHandler ; EXTI Line0
|
||||
DCD EXTI1_IRQHandler ; EXTI Line1
|
||||
DCD EXTI2_IRQHandler ; EXTI Line2
|
||||
DCD EXTI3_IRQHandler ; EXTI Line3
|
||||
DCD EXTI4_IRQHandler ; EXTI Line4
|
||||
DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1
|
||||
DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2
|
||||
DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3
|
||||
DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4
|
||||
DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5
|
||||
DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6
|
||||
DCD 0 ; Reserved
|
||||
DCD ADC1_2_IRQHandler ; ADC1 and ADC2
|
||||
DCD USB_HP_IRQHandler ; USB Device High Priority
|
||||
DCD USB_LP_IRQHandler ; USB Device Low Priority
|
||||
DCD FDCAN1_IT0_IRQHandler ; FDCAN1 interrupt line 0
|
||||
DCD FDCAN1_IT1_IRQHandler ; FDCAN1 interrupt line 1
|
||||
DCD EXTI9_5_IRQHandler ; External Line[9:5]s
|
||||
DCD TIM1_BRK_TIM15_IRQHandler ; TIM1 Break, Transition error, Index error and TIM15
|
||||
DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16
|
||||
DCD TIM1_TRG_COM_TIM17_IRQHandler ; TIM1 Trigger, Commutation, Direction change, Index and TIM17
|
||||
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
|
||||
DCD TIM2_IRQHandler ; TIM2
|
||||
DCD TIM3_IRQHandler ; TIM3
|
||||
DCD TIM4_IRQHandler ; TIM4
|
||||
DCD I2C1_EV_IRQHandler ; I2C1 Event
|
||||
DCD I2C1_ER_IRQHandler ; I2C1 Error
|
||||
DCD I2C2_EV_IRQHandler ; I2C2 Event
|
||||
DCD I2C2_ER_IRQHandler ; I2C2 Error
|
||||
DCD SPI1_IRQHandler ; SPI1
|
||||
DCD SPI2_IRQHandler ; SPI2
|
||||
DCD USART1_IRQHandler ; USART1
|
||||
DCD USART2_IRQHandler ; USART2
|
||||
DCD USART3_IRQHandler ; USART3
|
||||
DCD EXTI15_10_IRQHandler ; External Line[15:10]
|
||||
DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line
|
||||
DCD USBWakeUp_IRQHandler ; USB Wakeup through EXTI line
|
||||
DCD TIM8_BRK_IRQHandler ; TIM8 Break, Transition error and Index error Interrupt
|
||||
DCD TIM8_UP_IRQHandler ; TIM8 Update Interrupt
|
||||
DCD TIM8_TRG_COM_IRQHandler ; TIM8 Trigger, Commutation, Direction change and Index Interrupt
|
||||
DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare Interrupt
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD LPTIM1_IRQHandler ; LP TIM1 interrupt
|
||||
DCD 0 ; Reserved
|
||||
DCD SPI3_IRQHandler ; SPI3
|
||||
DCD UART4_IRQHandler ; UART4
|
||||
DCD 0 ; Reserved
|
||||
DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&3 underrun errors
|
||||
DCD TIM7_DAC_IRQHandler ; TIM7 and DAC2&4 underrun errors
|
||||
DCD DMA2_Channel1_IRQHandler ; DMA2 Channel 1
|
||||
DCD DMA2_Channel2_IRQHandler ; DMA2 Channel 2
|
||||
DCD DMA2_Channel3_IRQHandler ; DMA2 Channel 3
|
||||
DCD DMA2_Channel4_IRQHandler ; DMA2 Channel 4
|
||||
DCD DMA2_Channel5_IRQHandler ; DMA2 Channel 5
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD UCPD1_IRQHandler ; UCPD1
|
||||
DCD COMP1_2_3_IRQHandler ; COMP1, COMP2 and COMP3
|
||||
DCD COMP4_IRQHandler ; COMP4
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD CRS_IRQHandler ; CRS Interrupt
|
||||
DCD SAI1_IRQHandler ; Serial Audio Interface 1 global interrupt
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD FPU_IRQHandler ; FPU
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD RNG_IRQHandler ; RNG global interrupt
|
||||
DCD LPUART1_IRQHandler ; LP UART 1 interrupt
|
||||
DCD I2C3_EV_IRQHandler ; I2C3 Event
|
||||
DCD I2C3_ER_IRQHandler ; I2C3 Error
|
||||
DCD DMAMUX_OVR_IRQHandler ; DMAMUX overrun global interrupt
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD DMA2_Channel6_IRQHandler ; DMA2 Channel 6
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD CORDIC_IRQHandler ; CORDIC
|
||||
DCD FMAC_IRQHandler ; FMAC
|
||||
|
||||
__Vectors_End
|
||||
|
||||
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||
|
||||
AREA |.text|, CODE, READONLY
|
||||
|
||||
; Reset handler
|
||||
Reset_Handler PROC
|
||||
EXPORT Reset_Handler [WEAK]
|
||||
IMPORT SystemInit
|
||||
IMPORT __main
|
||||
|
||||
LDR R0, =SystemInit
|
||||
BLX R0
|
||||
LDR R0, =__main
|
||||
BX R0
|
||||
ENDP
|
||||
|
||||
; Dummy Exception Handlers (infinite loops which can be modified)
|
||||
|
||||
NMI_Handler PROC
|
||||
EXPORT NMI_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
HardFault_Handler\
|
||||
PROC
|
||||
EXPORT HardFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
MemManage_Handler\
|
||||
PROC
|
||||
EXPORT MemManage_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
BusFault_Handler\
|
||||
PROC
|
||||
EXPORT BusFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
UsageFault_Handler\
|
||||
PROC
|
||||
EXPORT UsageFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
SVC_Handler PROC
|
||||
EXPORT SVC_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
DebugMon_Handler\
|
||||
PROC
|
||||
EXPORT DebugMon_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
PendSV_Handler PROC
|
||||
EXPORT PendSV_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
SysTick_Handler PROC
|
||||
EXPORT SysTick_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
|
||||
Default_Handler PROC
|
||||
|
||||
EXPORT WWDG_IRQHandler [WEAK]
|
||||
EXPORT PVD_PVM_IRQHandler [WEAK]
|
||||
EXPORT RTC_TAMP_LSECSS_IRQHandler [WEAK]
|
||||
EXPORT RTC_WKUP_IRQHandler [WEAK]
|
||||
EXPORT FLASH_IRQHandler [WEAK]
|
||||
EXPORT RCC_IRQHandler [WEAK]
|
||||
EXPORT EXTI0_IRQHandler [WEAK]
|
||||
EXPORT EXTI1_IRQHandler [WEAK]
|
||||
EXPORT EXTI2_IRQHandler [WEAK]
|
||||
EXPORT EXTI3_IRQHandler [WEAK]
|
||||
EXPORT EXTI4_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel1_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel2_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel3_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel4_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel5_IRQHandler [WEAK]
|
||||
EXPORT DMA1_Channel6_IRQHandler [WEAK]
|
||||
EXPORT ADC1_2_IRQHandler [WEAK]
|
||||
EXPORT USB_HP_IRQHandler [WEAK]
|
||||
EXPORT USB_LP_IRQHandler [WEAK]
|
||||
EXPORT FDCAN1_IT0_IRQHandler [WEAK]
|
||||
EXPORT FDCAN1_IT1_IRQHandler [WEAK]
|
||||
EXPORT EXTI9_5_IRQHandler [WEAK]
|
||||
EXPORT TIM1_BRK_TIM15_IRQHandler [WEAK]
|
||||
EXPORT TIM1_UP_TIM16_IRQHandler [WEAK]
|
||||
EXPORT TIM1_TRG_COM_TIM17_IRQHandler [WEAK]
|
||||
EXPORT TIM1_CC_IRQHandler [WEAK]
|
||||
EXPORT TIM2_IRQHandler [WEAK]
|
||||
EXPORT TIM3_IRQHandler [WEAK]
|
||||
EXPORT TIM4_IRQHandler [WEAK]
|
||||
EXPORT I2C1_EV_IRQHandler [WEAK]
|
||||
EXPORT I2C1_ER_IRQHandler [WEAK]
|
||||
EXPORT I2C2_EV_IRQHandler [WEAK]
|
||||
EXPORT I2C2_ER_IRQHandler [WEAK]
|
||||
EXPORT SPI1_IRQHandler [WEAK]
|
||||
EXPORT SPI2_IRQHandler [WEAK]
|
||||
EXPORT USART1_IRQHandler [WEAK]
|
||||
EXPORT USART2_IRQHandler [WEAK]
|
||||
EXPORT USART3_IRQHandler [WEAK]
|
||||
EXPORT EXTI15_10_IRQHandler [WEAK]
|
||||
EXPORT RTC_Alarm_IRQHandler [WEAK]
|
||||
EXPORT USBWakeUp_IRQHandler [WEAK]
|
||||
EXPORT TIM8_BRK_IRQHandler [WEAK]
|
||||
EXPORT TIM8_UP_IRQHandler [WEAK]
|
||||
EXPORT TIM8_TRG_COM_IRQHandler [WEAK]
|
||||
EXPORT TIM8_CC_IRQHandler [WEAK]
|
||||
EXPORT LPTIM1_IRQHandler [WEAK]
|
||||
EXPORT SPI3_IRQHandler [WEAK]
|
||||
EXPORT UART4_IRQHandler [WEAK]
|
||||
EXPORT TIM6_DAC_IRQHandler [WEAK]
|
||||
EXPORT TIM7_DAC_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel1_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel2_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel3_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel4_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel5_IRQHandler [WEAK]
|
||||
EXPORT UCPD1_IRQHandler [WEAK]
|
||||
EXPORT COMP1_2_3_IRQHandler [WEAK]
|
||||
EXPORT COMP4_IRQHandler [WEAK]
|
||||
EXPORT CRS_IRQHandler [WEAK]
|
||||
EXPORT SAI1_IRQHandler [WEAK]
|
||||
EXPORT FPU_IRQHandler [WEAK]
|
||||
EXPORT RNG_IRQHandler [WEAK]
|
||||
EXPORT LPUART1_IRQHandler [WEAK]
|
||||
EXPORT I2C3_EV_IRQHandler [WEAK]
|
||||
EXPORT I2C3_ER_IRQHandler [WEAK]
|
||||
EXPORT DMAMUX_OVR_IRQHandler [WEAK]
|
||||
EXPORT DMA2_Channel6_IRQHandler [WEAK]
|
||||
EXPORT CORDIC_IRQHandler [WEAK]
|
||||
EXPORT FMAC_IRQHandler [WEAK]
|
||||
|
||||
WWDG_IRQHandler
|
||||
PVD_PVM_IRQHandler
|
||||
RTC_TAMP_LSECSS_IRQHandler
|
||||
RTC_WKUP_IRQHandler
|
||||
FLASH_IRQHandler
|
||||
RCC_IRQHandler
|
||||
EXTI0_IRQHandler
|
||||
EXTI1_IRQHandler
|
||||
EXTI2_IRQHandler
|
||||
EXTI3_IRQHandler
|
||||
EXTI4_IRQHandler
|
||||
DMA1_Channel1_IRQHandler
|
||||
DMA1_Channel2_IRQHandler
|
||||
DMA1_Channel3_IRQHandler
|
||||
DMA1_Channel4_IRQHandler
|
||||
DMA1_Channel5_IRQHandler
|
||||
DMA1_Channel6_IRQHandler
|
||||
ADC1_2_IRQHandler
|
||||
USB_HP_IRQHandler
|
||||
USB_LP_IRQHandler
|
||||
FDCAN1_IT0_IRQHandler
|
||||
FDCAN1_IT1_IRQHandler
|
||||
EXTI9_5_IRQHandler
|
||||
TIM1_BRK_TIM15_IRQHandler
|
||||
TIM1_UP_TIM16_IRQHandler
|
||||
TIM1_TRG_COM_TIM17_IRQHandler
|
||||
TIM1_CC_IRQHandler
|
||||
TIM2_IRQHandler
|
||||
TIM3_IRQHandler
|
||||
TIM4_IRQHandler
|
||||
I2C1_EV_IRQHandler
|
||||
I2C1_ER_IRQHandler
|
||||
I2C2_EV_IRQHandler
|
||||
I2C2_ER_IRQHandler
|
||||
SPI1_IRQHandler
|
||||
SPI2_IRQHandler
|
||||
USART1_IRQHandler
|
||||
USART2_IRQHandler
|
||||
USART3_IRQHandler
|
||||
EXTI15_10_IRQHandler
|
||||
RTC_Alarm_IRQHandler
|
||||
USBWakeUp_IRQHandler
|
||||
TIM8_BRK_IRQHandler
|
||||
TIM8_UP_IRQHandler
|
||||
TIM8_TRG_COM_IRQHandler
|
||||
TIM8_CC_IRQHandler
|
||||
LPTIM1_IRQHandler
|
||||
SPI3_IRQHandler
|
||||
UART4_IRQHandler
|
||||
TIM6_DAC_IRQHandler
|
||||
TIM7_DAC_IRQHandler
|
||||
DMA2_Channel1_IRQHandler
|
||||
DMA2_Channel2_IRQHandler
|
||||
DMA2_Channel3_IRQHandler
|
||||
DMA2_Channel4_IRQHandler
|
||||
DMA2_Channel5_IRQHandler
|
||||
UCPD1_IRQHandler
|
||||
COMP1_2_3_IRQHandler
|
||||
COMP4_IRQHandler
|
||||
CRS_IRQHandler
|
||||
SAI1_IRQHandler
|
||||
FPU_IRQHandler
|
||||
RNG_IRQHandler
|
||||
LPUART1_IRQHandler
|
||||
I2C3_EV_IRQHandler
|
||||
I2C3_ER_IRQHandler
|
||||
DMAMUX_OVR_IRQHandler
|
||||
DMA2_Channel6_IRQHandler
|
||||
CORDIC_IRQHandler
|
||||
FMAC_IRQHandler
|
||||
|
||||
B .
|
||||
|
||||
ENDP
|
||||
|
||||
ALIGN
|
||||
|
||||
;*******************************************************************************
|
||||
; User Stack and Heap initialization
|
||||
;*******************************************************************************
|
||||
IF :DEF:__MICROLIB
|
||||
|
||||
EXPORT __initial_sp
|
||||
EXPORT __heap_base
|
||||
EXPORT __heap_limit
|
||||
|
||||
ELSE
|
||||
|
||||
IMPORT __use_two_region_memory
|
||||
EXPORT __user_initial_stackheap
|
||||
|
||||
__user_initial_stackheap
|
||||
|
||||
LDR R0, = Heap_Mem
|
||||
LDR R1, =(Stack_Mem + Stack_Size)
|
||||
LDR R2, = (Heap_Mem + Heap_Size)
|
||||
LDR R3, = Stack_Mem
|
||||
BX LR
|
||||
|
||||
ALIGN
|
||||
|
||||
ENDIF
|
||||
|
||||
END
|
||||
|
||||
;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****
|
||||
@@ -1,85 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2022 Yuankang Liang(XerolySkinner)
|
||||
#
|
||||
# 本软件按原样提供,无任何明示或暗示
|
||||
# 在任何情况下,作者都不承担任何损害赔偿责任
|
||||
#
|
||||
# 使用的许可声明:
|
||||
# 1. 不得歪曲本软件的来源,你不能声称你编写了原始软件.
|
||||
# 2. 免费授予以任何目的,前提是版权声明出现在所有副本中.
|
||||
# 并且版权声明和许可声明同时出现.
|
||||
# 3. 你有使用,复制,修改,分发,和销售本软件的许可.
|
||||
# 4. 如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的.
|
||||
# 5. 本通知不得从任何来源删除或更改.
|
||||
#
|
||||
# Yuankang Liang(XerolySkinner)
|
||||
# E-mail:zabbcccbbaz@163.com
|
||||
# QQ:2715099320
|
||||
# Mobile Phone:13005636215
|
||||
#
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file varint.h
|
||||
* @brief 全局共用的标准类型表
|
||||
* @mainpage 主要信息
|
||||
* @author Yuankang Liang(XerolySkinner)
|
||||
* @email zabbcccbbaz@163.com
|
||||
* @version V1.0.0
|
||||
* @date 2022-11-07 18:50
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "stdint.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 程序
|
||||
//
|
||||
typedef uint8_t u8; ///< 8位无符号数类型
|
||||
typedef uint16_t u16; ///< 16位无符号数类型
|
||||
typedef uint32_t u32; ///< 32位无符号数类型
|
||||
typedef uint64_t u64; ///< 64位无符号数类型
|
||||
|
||||
typedef int8_t i8; ///< 8位有符号数类型
|
||||
typedef int16_t i16; ///< 16位有符号数类型
|
||||
typedef int32_t i32; ///< 32位有符号数类型
|
||||
typedef int64_t i64; ///< 64位有符号数类型
|
||||
|
||||
typedef volatile u8 vu8; ///< 8位无符号易变类型
|
||||
typedef volatile u16 vu16; ///< 16位无符号易变类型
|
||||
typedef volatile u32 vu32; ///< 32位无符号易变类型
|
||||
typedef volatile u64 vu64; ///< 64位无符号易变类型
|
||||
|
||||
typedef volatile i8 vi8; ///< 8位有符号易变类型
|
||||
typedef volatile i16 vi16; ///< 16位有符号易变类型
|
||||
typedef volatile i32 vi32; ///< 32位有符号易变类型
|
||||
typedef volatile i64 vi64; ///< 64位有符号易变类型
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 位宏
|
||||
#define P8(x) ((u8*)(&(x))) ///< 强制转换变成u8的指针
|
||||
#define Pn8(x,y) (((u8*)(&(x)))[y]) ///< 强制转换变成u8的数组
|
||||
#define P16(x) ((u16*)(&(x))) ///< 强制转换变成u16的指针
|
||||
#define Pn16(x,y) (((u16*)(&(x)))[y]) ///< 强制转换变成u16的数组
|
||||
#define P32(x) ((u32*)(&(x))) ///< 强制转换变成u32的指针
|
||||
#define Pn32(x,y) (((u32*)(&(x)))[y]) ///< 强制转换变成u32的数组
|
||||
|
||||
#define DelLb(x) (x & (x - 1)) ///< 移除最低位的1
|
||||
#define qDelLb(x) (x=(x & (x - 1))) ///< 移除并保存最低位的1
|
||||
|
||||
#define toBool(x) (x!=0) ///< 数布尔化
|
||||
#define uBit(x,y) (x&(1<<y)) ///< 挑选某一位
|
||||
#define tBit(x,y) (toBool(uBit(x,y))) ///< 挑选某一位并且布尔化
|
||||
|
||||
#define sBit(x,y) (x|(1<<y)) ///< 置高某一位
|
||||
#define rBit(x,y) (x&(~(1<<y))) ///< 拉低某一位
|
||||
#define mBit(x,y,z) ((z)?sBit(x,y):rBit(x,y)) ///< 选择性拉高拉低某一位
|
||||
|
||||
#define LpAdd(x,y) ((x+1)<y?x+1:0) ///< 带最高限制的加法
|
||||
#define LpDec(x,y) (x>0?x-1:y-1) ///< 带最低限制的减法
|
||||
#define qLpAdd(x,y) (x=(x+1)<y?x+1:0) ///< 带最高限制的自增
|
||||
#define qLpDec(x,y) (x=x>0?x-1:y-1) ///< 带最低限制的自减
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user