- MX的烧录口和时钟设置:
- 配置时钟:
- 串口1配置(用来输出提示信息)
- 串口2配置波特率115200,使能全局中断(用来做esp8266的串口通信)
- 命好名生成代码并打开。
- 在usart.c中编写u1,u2格式化输出函数,在头文件加上USART1_TXBUFF_SIZE等宏定义和函数声明等
//在usart.h中加入头文件 #include "stdio.h" //包含需要的头文件 #include "stdarg.h" //包含需要的头文件 #include "string.h" //包含需要的头文件 //宏定义及函数声明(.h): #define USART1_TXBUFF_SIZE 256 //定义串口1 发送缓冲区大小 256字节 #define USART2_TXBUFF_SIZE 1024 //定义串口2 发送缓冲区大小 1024字节 void u1_printf(char*,...) ; //串口1 printf函数 void u2_printf(char*,...) ; //串口1 printf函数
//在usart.c中加入函数: /*-------------------------------------------------*/ /*函数名:串口1 printf函数 */ /*参 数:char* fmt,... 格式化输出字符串和参数 */ /*返回值:无 */ /*-------------------------------------------------*/ __align(8) char Usart1_TxBuff[USART1_TXBUFF_SIZE]; void u1_printf(char* fmt,...) //不定参数函数 { unsigned int i,length; va_list ap; va_start(ap,fmt); vsprintf(Usart1_TxBuff,fmt,ap); va_end(ap); length=strlen((const char*)Usart1_TxBuff); while((USART1->SR&0X40)==0); for(i = 0;i < length;i ++) { USART1->DR = Usart1_TxBuff[i]; while((USART1->SR&0X40)==0); } } /*-------------------------------------------------*/ /*函数名:串口2 printf函数 */ /*参 数:char* fmt,... 格式化输出字符串和参数 */ /*返回值:无 */ /*-------------------------------------------------*/ __align(8) char USART2_TxBuff[USART2_TXBUFF_SIZE]; void u2_printf(char* fmt,...) { unsigned int i,length; va_list ap; va_start(ap,fmt); vsprintf(USART2_TxBuff,fmt,ap); va_end(ap); length=strlen((const char*)USART2_TxBuff); while((USART2->SR&0X40)==0); for(i = 0;i < length;i ++) { USART2->DR = USART2_TxBuff[i]; while((USART2->SR&0X40)==0); } } /*--------------------------------