stm32f103双串口收发库函数(结构体)版本(调试通过)附上完整代码和下载链接

本文提供了STM32F103双串口收发的结构体版本,实现了串口初始化、参数设置、中断处理等功能,并附带了完整的代码和下载链接。代码设计思路清晰,结构体封装使得模块化更易维护,支持USART1、USART2、USART3,能处理不定长数据帧的串口收发。
摘要由CSDN通过智能技术生成

文件下载地址: 点击打开链接

https://download.csdn.net/download/jkson10/10494553

除了之前按照原子的驱动写过一个版本,这是通过结构体的编写来实现串口收发

实现功能

初始化三个串口,调用两个,一个串口发送一个串口接收

串口数据接收除接收数据外还需给出帧有效数据字节长度;

串口可使用USART1USART2USART3,串口参数能自由设置;

实现不定长数据帧的串口收发

编译环境:UV5    

设计思路及流程

将串口参数,初始化,中断,数组都写在结构体里面,各个模块分开,最后在主函数中进行数组设置,

变量,优先级设置,时钟使能。在循环中设置串口收发来实现功能。比在原子修改思路更加简洁。


1.建立SCOM.c SCOM.h文件

串口初始化结构:

 

 串口参数设置结构体:

 

 

中断函数结构:

  

  


上述代码主要是判断数据位是否空,然后进行执行

 

主函数:

数组设置,变量,优先级设置,时钟使能



判断是否小于变量MIAO,小于则代表可以继续接收,然后进入循环。可以3com口任意调用两个:



Debug模式调试

 


使用助手调试

 

 

至于怎么debug 使用串口助手,请自行百度


完整代码:

SCOM.C

#include "SCOM.h"
#include "string.h"
#include "sys.h"

extern uint8_t OLED;
extern uint8_t MONE[TX_BUFFER_MAX_SIZE]; //ÉèÖûº³åÇø±äÁ¿//
extern uint8_t MIAO;
SCOM_TypeDef_Struct SCOM1_BASE,SCOM2_BASE,SCOM3_BASE;
**************************************************´®¿Ú³õʼ»¯½á¹¹*****************************///
SCOMHardware_TypeDef_Struct SCOM_Hardware[] = {

    { SCOM1_USART,SCOM1_USART_IRQn ,SCOM1_tx_GPIO, SCOM1_tx_GPIO_Pin,SCOM1_rx_GPIO,SCOM1_rx_GPIO_Pin,  
    SCOM1_rx_DMA_Channel, SCOM1_rx_DMA_Channel_IRQn,SCOM1_tx_DMA_Channel,SCOM1_tx_DMA_Channel_IRQn  },  

    { SCOM2_USART,SCOM2_USART_IRQn ,SCOM2_tx_GPIO, SCOM2_tx_GPIO_Pin,SCOM2_rx_GPIO,SCOM2_rx_GPIO_Pin,  
    SCOM2_rx_DMA_Channel, SCOM2_rx_DMA_Channel_IRQn,SCOM2_tx_DMA_Channel,SCOM2_tx_DMA_Channel_IRQn  },  

    { SCOM3_USART,SCOM3_USART_IRQn ,SCOM3_tx_GPIO, SCOM3_tx_GPIO_Pin,SCOM3_rx_GPIO,SCOM3_rx_GPIO_Pin,  
    SCOM3_rx_DMA_Channel, SCOM3_rx_DMA_Channel_IRQn,SCOM3_tx_DMA_Channel,SCOM3_tx_DMA_Channel_IRQn  },  
};

void SCOM_StructInit(SCOM_InitTypeDef_Struct  *SCOMx_InitStruct)
{
	SCOMx_InitStruct->enable_SCOM                               
				=SCOM_ENABLE_DEFAULT;
	SCOMx_InitStruct->usartInitParm.USART_BaudRate             
				=SCOM_BaudRate_DEFAULT;
	SCOMx_InitStruct->usartInitParm.USART_HardwareFlowControl   
				=SCOM_HardwareFlowControl_DEFAULT;
	SCOMx_InitStruct->usartInitParm.USART_WordLength            
				=SCOM_WordLength_DEFAULT;
	SCOMx_InitStruct->usartInitParm.USART_Parity                
				=SCOM_Parity_DEFAULT;
	SCOMx_InitStruct->usartInitParm.USART_StopBits              
				=SCOM_StopBits_DEFAULT;
	SCOMx_InitStruct->usartInitParm.USART_Mode                
				=SCOM_Mode_DEFAULT;
	SCOMx_InitStruct->SCOM_USART_PreemptionPriority            
				=SCOM_USART_PreemptionPriority_DEFAULT;
	SCOMx_InitStruct->SCOM_USART_SubPriority                    
				=SCOM_USART_SubPriority_DEFAULT;
}


//******************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值