一直被说是就不能把几个串口放在一起,写个标准例程直接用,非要每次用哪个串口才现场改程序,被迫把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这种某个函数已经在头文件中声明了,但是在调用时出错就是没有可能声明冲突了,改个新的名字。
一直被说是就不能把几个串口放在一起,写个标准例程直接用,非要每次用哪个串口才现场改程序,被迫把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这种某个函数已经在头文件中声明了,但是在调用时出错就是没有可能声明冲突了,改个新的名字。
举报