看正点原子的stm32串口初始化程序,usart.h文件里如下:
#ifndef __USART_H
#define __USART_H
#include <stm32f10x_lib.h>
#include "stdio.h"
extern u8 USART_RX_BUF[64]; //接收缓冲,最大63个字节.末字节为换行符
extern u8 USART_RX_STA; //接收状态标记
//如果想串口中断接收,请不要注释以下宏定义
//#define EN_USART1_RX //使能串口1接收
void uart_init(u32 pclk2,u32 bound);
#endif
这段程序里#define EN_USART1_RX被注释掉了。
usart.c里有一段串口中断响应子函数程序如下:
#ifdef EN_USART1_RX //如果使能了接收
u8 USART_RX_BUF[64]; //接收缓冲,最大64个字节.
u8 USART_RX_STA=0; //接收状态标记
void USART1_IRQHandler(void)
{
......
}
#endif
手册给出的解释是,这里用了宏定义#ifdef,当需要使用串口接收的时候,只要在usart.h里面定义EN_USART1_RX就可以了。不使用的时候注释掉就可,这样可以省出部分sram和flash。
下转一篇文章: