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();
}
//然后你在主程序不断调用就能持续发出了