STM32
直播中

飘逸的D

12年用户 797经验值
私信 关注
[问答]

STM32F407的多路串口usart分别有何功能呢

STM32F407的多路串口usart分别有何功能呢?


回帖(1)

杨桂英

2021-12-6 14:16:22
一直被说是就不能把几个串口放在一起,写个标准例程直接用,非要每次用哪个串口才现场改程序,被迫把usart1,usart2,usart3进行了资源整合,挂在这以备不时之需。
功能简述:
串口1,串口2,串口3串口内自收自发数据,串口之间通信互发数据,读取串口的缓冲区进行收发都可以,资源冲突已经解决,可以直接用。
程序声明:
根据标准例程对usart1,usart2,usart3进行了GPIO,时钟,串口等配置,放在了一个工程中,为每个串口定义了自己的缓冲区(大小也是)用于存储串口接收到的数据。
因为主要用的是usart1来进行调试,所以就为usart1中配置了标准库函数,若需要用其他串口来打印输出,可以将下方代码复制到对应的.c文件,更改USART1串口号即可。



#if 1
#pragma import(__use_no_semihosting)            
//标准库需要的支持函数                 
struct __FILE
{
        int handle;
};

FILE __stdout;      
//定义_sys_exit()以避免使用半主机模式   
void _sys_exit(int x)
{
        x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{        
        while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
        USART1->DR = (u8) ch;      
        return ch;
}
#endif
哪个串口需要用到ucos就复制这段代码


#if SYSTEM_SUPPORT_OS
#include "includes.h"                                        //ucos 使用          
#endif
移植注意事项:


需要更改串口对应的GPIO引脚,对应的缓冲区变量,缓冲区大小,接收标记变量,使能变量,串口号,函数名,时钟源,比如串口1的时钟源是APB2,串口2则是APB1,增加更多串口时,要同时增加变量声明,如串口2


#ifndef __USART2_H
#define __USART2_H


如果出现#223-D: function "xxxxxx" declared implicitly这种某个函数已经在头文件中声明了,但是在调用时出错就是没有可能声明冲突了,改个新的名字。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分