STM32 透传简易实现的软件方法

使用STM32芯片 的串口和CAN 接口 实现互相透传的功能

c 复制代码
static uint8_t uart_trans_semaphore = 0;//USB发送信号量
static uint8_t uart_transmission_id = 0;//透传ID
/**
 * @brief 使能uart发送
 * @param id 透传ID
 */
void uart_unvarnished_transmission_enable(uint8_t id)
{
    uart_trans_semaphore = 1;
    uart_transmission_id = id;
}
/**
 * @brief 不使能uart发送
 * @param  
 */
void uart_unvarnished_transmission_disable(void)
{
    uart_trans_semaphore = 0;
}

/**
 * @brief 获取uart发送信号量
 * @param  
 * @return 1 透传 0 不透传
 */
uint8_t uart_trans_semaphore_get(void)
{
    return uart_trans_semaphore;
}

/**
 * @brief uart发送数据
 * @param pdata 
 * @param len 
 */
void uart_send_data(uint8_t *pdata, uint16_t len)
{
	HAL_UART_Transmit_DMA(&huart1, pdata, len);
}
/**
 * @brief 发送透传数据
 * @param pdata 
 * @param len 
 */
void uart_send_transmission_data(uint8_t *pdata,uint16_t len)
{
    if(uart_trans_semaphore_get()&& len>0 )
    {
        FDCAN_Send_Data(uart_transmission_id,pdata,len);//使用CAN发送数据
    }
}

/**
 * @brief 接受透传数据发送
 * @param pdata 
 * @param len 
 */
void uart_recv_transmission_data(uint8_t *pdata,uint16_t len)
{
    if(uart_trans_semaphore_get()&& len>0)
    {
        uart_send_data(pdata,len); //使用uart发送数据
    }
}

其中 uart_send_transmission_data 函数接受串口的数据发送到can。

再创建一个任务用来 接收can收到的数据缓冲 发送到串口

c 复制代码
/**
 * @brief 透传接受任务
 * @param argument 
 */
void user_uart_unvarnished_transmission_task(void *argument)
{
	uint8_t uart_recv_data[250];
	uint16_t data_len;
	for (;;)
	{
		if (uart_trans_semaphore_get())
		{
			data_len = Driver_Buffer_RefreshData(&USERRxDataBuffer1,uart_recv_data);
			uart_recv_transmission_data(uart_recv_data,data_len);
		}
		osDelay(5);
	}
}

其中的Driver_Buffer_RefreshData是刷新了can的接收缓冲

这样就实现了串口 和can的数据互传

参考
环形缓冲区的实现

相关推荐
糖糖单片机设计1 小时前
STM32 老人跌倒监测报警系统
stm32·单片机·嵌入式硬件
智闲电子设计2 小时前
STM32 硬件 CRC 与 UID 实战:固件校验防变砖,UID 防抄板,这两个外设白用太可惜
stm32·单片机·嵌入式硬件
嵌入式阿蔡2 小时前
CoAP / LwM2M 轻量协议:受限设备为什么不用 MQTT
单片机·物联网·嵌入式
wuyk5553 小时前
107.FreeRTOS 链表深度解析:从原理到面试满分答案
c语言·开发语言·数据结构·stm32·单片机·链表·面试
hongmai6668883 小时前
ESP32-WROVER-IE-N4R8:外接天线+8MB内存,专治信号焦虑
笔记·单片机·嵌入式硬件·microsoft·risc-v
恒锐丰科技林技术员4 小时前
EG11722:高耐压 150V 降压 DC‑DC 电源芯片,工业宽压电源优选方案
经验分享·嵌入式硬件
安河桥。4 小时前
MIPI CSI-2物理层接口:C-PHY与D-PHY技术规格说明
嵌入式硬件·视频
雾削木4 小时前
GPIO基本概念
单片机·嵌入式硬件
LCG元5 小时前
STM32 USB CDC 虚拟串口开发实战:从 CubeMX 配置到 printf 重定向与稳定收发
stm32·单片机·嵌入式硬件
zcmodeltech6 小时前
源网荷储一体化沙盘模型多场景控制系统设计——基于STM32与Modbus RTU的源网荷储、多能互补、冷热电三联供全场景联动方案,服务范围覆盖全国
数据库·人工智能·stm32·单片机·嵌入式硬件