STM32F103 5个串口232、485通信 - (库版本)
首先呢,打开我们的《1、STM32F103(库版本)5个串口232 485通信》工程,工程源码可以去本系列的内容介绍中去下载。
目录结构如下:

main.c文件是我们的主函数,代码如下:
#include <string.h>
#include <stdlib.h>
#include "stdio.h"
#include "config.h"
#include "delay.h"
#include "usart1.h"
#include "usart2.h"
#include "usart3.h"
#include "usart4.h"
#include "usart5.h"
int main(void)
{
u8 buff[200]="";
int siz = 0;
delay_init();//延时函数初始化
usart1_Configuration(115200);
usart2_Configuration(115200);
usart3_Configuration(115200);
usart4_Configuration(115200);
usart5_Configuration(115200);
usart1_Send((u8 *)"usart1 recv:",strlen("usart1 recv:"));
usart2_Send((u8 *)"usart2 recv:",strlen("usart1 recv:"));
usart3_Send((u8 *)"usart3 recv:",strlen("usart1 recv:"));
usart4_Send((u8 *)"usart4 recv:",strlen("usart1 recv:"));
usart5_Send((u8 *)"usart5 recv:",strlen("usart1 recv:"));
//printf("Begin...\r\n");
while(1)
{
siz = 0;
memset(buff,0,sizeof(buff));
siz = usart1_Receive(buff, sizeof(buff));
if(siz){
usart1_Send((u8 *)"usart1 recv:",strlen("usart1 recv:"));
usart1_Send(buff,siz);
}
siz = usart2_Receive(buff, sizeof(buff));
if(siz){
usart2_Send((u8 *)"usart2 recv:",strlen("usart2 recv:"));
usart2_Send(buff,siz);
}
siz = usart3_Receive(buff, sizeof(buff));
if(siz){
usart3_Send((u8 *)"usart3 recv:",strlen("usart3 recv:"));
usart3_Send(buff,siz);
}
siz = usart4_Receive(buff, sizeof(buff));
if(siz){
usart4_Send((u8 *)"usart4 recv:",strlen("usart4 recv:"));
usart4_Send(buff,siz);
}
siz = usart5_Receive(buff, sizeof(buff));
if(siz){
usart5_Send((u8 *)"usart5 recv:",strlen("usart5 recv:"));
usart5_Send(buff,siz);
}
}
}
从代码中我们可以看到,我们代码的波特率采用的是115200,接收的最大缓存默认设置的是200字节,已usart1为例子,缓存设置位置在usart1.h文件中,代码如下:
#ifndef __USART1_H_
#define __USART1_H_
#include "sys.h"
#define USART1_SYS 1 //设置编译版本,0是库版本,1是寄存器版本
#define USART1_BUFF 200 //接收数据缓存
#define USART1_485_EN 0 //1 开启485功能,0 关闭485功能
#define USART1_MAP_EN 0 //1 开启重定向功能,0关闭重定向功能
void usart1_Configuration(u32 bound);
void usart1_Send(u8 *buf,u32 len);
u32 usart1_Receive(u8 *buf, u32 buflen);
void usart1_FreeBuff(void);
#endif
从上面代码就可以看到,针对每个串口,我这是都设置了支持485和232通讯的设置项,同时还有个重定向的设置以及寄存器版本和库版本的切换设置,大家可以自行下载工程代码去看看。