2021年全国大学生电子设计大赛G题 串口发送

STM32串口发送

头文件部分

其实和上一篇一样 定义好一个数据结构体 然后用于初始化他 这个结构体里面有帧头帧尾 用于验证数据正确性。

和之前差不多,实例化了三个 支持三个串口
#include "stm32f1xx_hal.h"

typedef struct
{
	
	uint8_t head;
	uint8_t tail;
	uint8_t direction;
	uint8_t data[2];
	
}send_stack;

extern send_stack tx_stack1;
extern send_stack tx_stack2;
extern send_stack tx_stack3;

void tx_stack1_init(void);
void tx_stack2_init(void);
void tx_stack3_init(void);

void Usart_SendDate1(void);
void Usart_SendDate2(void);
void Usart_SendDate3(void);


.c文件

#include "Drv_UART.h"
#include "usart.h"
send_stack tx_stack1;
send_stack tx_stack2;
send_stack tx_stack3;

//初始化结构体
void tx_stack1_init()
{
	  tx_stack1.head = 0x2C;     //协议栈头
    tx_stack1.direction = 0x12;//
    memset(tx_stack1.data, 0, sizeof(tx_stack1.data));//把tx_stack.data[]全部初始化为零
    tx_stack1.tail = 0x2D;     //协议栈尾,结束位栈头和栈尾最好能互补
}


//发送程序 几乎相同

void Usart_SendDate1(void)
{
	uint8_t counter;
	HAL_UART_Transmit(&huart1, &tx_stack1.head, 1, 0xffff);
	HAL_UART_Transmit(&huart1, &tx_stack1.direction, 1, 0xffff);
	for(counter = 0;counter<2;counter++)
	{
		HAL_UART_Transmit(&huart1, &tx_stack1.data[counter], 1, 0xffff);
		while(HAL_UART_GetState(&huart1)==HAL_UART_STATE_BUSY_TX);
	}
	HAL_UART_Transmit(&huart1, &tx_stack1.tail, 1, 0xffff);
	while(HAL_UART_GetState(&huart1)==HAL_UART_STATE_BUSY_TX);
}
  while (1)
  {
    /* USER CODE END WHILE */
	
    /* USER CODE BEGIN 3 */
		Usart_SendDate1();
		Usart_SendDate2();
		Usart_SendDate3();
  }
  //然后你在主程序不断调用就能持续发出了
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值