STM32串口通信:串口通信库

    xiaoxiao2021-03-25  211

    从箱底捞出来的f103,支持的c语言太基础,虽然性能很高,然而开发时间长难以快速的使用,一开始把 c++那些该有的都搬进来,结果当然是觉得有的函数都没有了。小小的写了一个库用来通过串口来DEBUG 一共有这几个函数,串口为PA9和PA10,在C8T6最小系统上面通过测试 Serial_Begin()    初始化USART,设定波特率 Serial_WriteLine() 传输数据并换行 Serial_Write() 传输数据,没有换行符 例: char str[] = {"THIS IS STM32C8T6"}; void main() {   Serial_Begin(115200); while(1) { Serial_WriteLine(str); } } 头文件: #define ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} void Serial_WriteLine(char *data); void Serial_Write(char *data); void Serial_Begin(int baud); int Strsize(char *data); void Error_Process(); void Serial_Printf(char *data); c文件: #include "stm32f1xx_hal.h" #include "Sp_Command.h" UART_HandleTypeDef MyUart; char str1[14]  = {"SIZE OF STR:"}; char newline[] = {"\r\n"}; void Serial_Begin(int baud)//初始化UART {   MyUart.Instance = USART1;   MyUart.Init.BaudRate = baud;   MyUart.Init.WordLength = UART_WORDLENGTH_8B;   MyUart.Init.StopBits = UART_STOPBITS_1;   MyUart.Init.Parity = UART_PARITY_NONE;   MyUart.Init.Mode = UART_MODE_TX_RX;   MyUart.Init.HwFlowCtl = UART_HWCONTROL_NONE;   MyUart.Init.OverSampling = UART_OVERSAMPLING_16;   if (HAL_UART_Init(&MyUart) != HAL_OK)   {       Error_Process();   } } void Serial_Write(char *data)//写字符串数组 {       while(*data!='\0')       {     HAL_UART_Transmit(&MyUart,(uint8_t*)data,1,0xFFFF);         data++;       }       } void Serial_WriteLine(char *data)//写一行字符 {       Serial_Write(data);       Serial_Write(newline); } void Error_Process()//错误处理 {       } 8月19日更新:接收处理函数 头文件: #define ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} void Serial_WriteLine(char *data); void Serial_Begin(int baud); int Strsize(char *data); void Error_Process(); void Serial_Printf(char *data); void Serial_Read(); uint8_t RxData[8]; c文件追加函数: void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//串口接收中断后的处理函数 {       HAL_UART_Transmit(&MyUart,RxData,8,0xFF);//将收到的数据通过中断发送回去 } void Serial_Read() {                   HAL_UART_Receive_IT(&MyUart,RxData,8); } 将Serial_Read放置在主函数文件的main函数中的while循环内,如果在while循环或者循环外,则只接收一次数据。
    转载请注明原文地址: https://ju.6miu.com/read-284.html

    最新回复(0)