广州网站维护公司,微信怎么关闭小程序,sem代运营,网页设计基础介绍的定义
串行通信、并行通信、全双工、半双工、单工、同步、异步、比特率、码元、波特率、TTL、RS232、DB9接口、DTE、DCE、协议层、USART、UART、CH340G芯片、USB。
通信基础
根据数据传送的方式#xff0c;通讯可分为串行通讯与并行通讯。
串行通信#xff1a;同一时…介绍的定义
串行通信、并行通信、全双工、半双工、单工、同步、异步、比特率、码元、波特率、TTL、RS232、DB9接口、DTE、DCE、协议层、USART、UART、CH340G芯片、USB。
通信基础
根据数据传送的方式通讯可分为串行通讯与并行通讯。
串行通信同一时刻只能传输一个数据位的数据。串行通讯可以节省数据线的硬件成本。
并行通信可以同时传输多个数据位的数据。因为一次可传输多个数据位的数据 在数据传输速率相同的情况下并行通讯传输的数据量要大得多。使用很多数据线进行传输。
根据数据通讯的方向通讯又分为全双工、半双工及单工通讯它们主要以信道的方向来区分。
全双工在同一时刻两个设备之间可以同时收发数据。
半双工两个设备之间可以收发数据但不能在同一时刻进行。
单工在任何时刻都只能进行一个方向的通讯即一个固定为发送设备另一个固定为接收设备。
根据通讯的数据同步方式又分为同步和异步两种可以根据通讯过程中是否有使用时钟信号进行简单的区分。
同步通讯收发设备双方会使用一根信号线表示时钟信号在时钟信号的驱动下双方进行协调同步数据。通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样。在同步通讯中数据信号所传输的内容绝大部分就是有效数据同步通讯的效率更高。同步通讯双方的时钟允许误差较小。
异步通讯不使用时钟信号进行数据同步它们直接在数据信号中穿插一些同步用的信号位或者把主体数据进行打包以数据帧的格式传输数据有时还需要双方约定数据的传输速率以便更好地同步。异步通讯中会包含帧的各种标识符异步通讯双方的时钟允许误差较大。
通讯速率衡量通讯性能常以比特率(Bitrate)来表示即每秒钟传输的二进制位数单位为比特每秒(bit/s)。
“波特率” (Baudrate)表示每秒钟传输了多少个码元。
码元一个码元就是一个脉冲信号一个脉冲信号有可能携带1bit数据也有可能携带2bit数据、4bit数据。把振幅分成四种低00、中01、高10、很高11发一个脉冲信号携带2bit的数据。一个码元能携带1bit数据那么比特率 波特率一个码元能携带2bit数据那么比特率 2倍的波特率。
根据通讯使用的电平标准不同串口通讯可分为 TTL 标准及 RS-232 标准。 RS232标准规定了信号的用途、通讯接口以及信号的电平标准。
两个通讯设备的“DB9 接口”之间通过串口信号线建立起连接 串口信号线中使用“RS-232 标准”传输数据信号。由于 RS-232 电平标准的信号不能直接被控制器直接识别所以这些信号会经过一个“电平转换芯片”转换成控制器能识别的 “TTL 标准”的电平信号。
DB9接口如下图DTE数据终端设备(计算机、路由)DCE数据通讯设备(调制解调器、猫)。通常DTE引出公头DCE引出母头。DB9接口里面连的有TXD、RXD信号线串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口 TTL标准控制器一般使用 TTL 电平标准所以常常会使用 MA3232 芯片对 TTL 及 RS-232 电平的信号进行互相转换。
协议层规定了数据包的内容它由启始位、主体数据、校验位以及停止位组成通讯双方的数据包格式要约定一致才能正常收发数据。
USART通用同步异步收发器串行通信设备可与外部设备进行全双工数据交换。串行通信一般是以帧格式传输数据即是一帧一帧的传输每帧包含有起始信号、数据信息、停止信息可能还有校验信息。
UART去掉了同步通信功能只有异步通信。平时用的串口通信基本都是 UART。
CH340G 芯片USB 总线的转接芯片实现 USB 转 USART、USB 转 lrDA 红外或者 USB 转打印机接口这里使用其 USB 转 USART 功能原理图如下。其中的USB-MINI就是我们的USB。 用下面这个线就能把stm32和电脑连起来了。 串口中断接收回显实验
main.c
实现开发板与电脑通信在开发板上电时通过 USART 发送一串字符串给电脑然后开发板进入中断接收等待状态如果电脑有发送数据过来开发板就会产生中断中断服务函数接收数据并马上把数据返回发送给电脑。 main里面调用 USART_Config 函数完成 USART 初始化配置包括 GPIO 配置 USART 配置接收中断使能然后什么都不做等待 USART 接收中断的产生并在中断服务函数把数据回传。
#include stm32f10x.h
#include bsp_usart.h/*** brief 主函数* param 无* retval 无*/
int main(void)
{ /*初始化USART 配置模式为 115200 8-N-1中断接收*/USART_Config();/* 发送一个字符串 */Usart_SendString( DEBUG_USARTx,这是一个串口中断接收回显实验\n);while(1){ }
}usart.c
下面的NVIC_Configuration函数进行中断控制器 NVIC 的配置配置 USART 作为中断源。
static void NVIC_Configuration(void)下面的USART_Config函数进行USART 初始化配置主要是设置GPIO_InitStructure和USART_InitStructure这两个结构体变量。
void USART_Config(void)
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;下面这两个函数进行字符的发送。
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)USART_Config函数整个流程大致是
使能 RX 和 TX 引脚 GPIO 时钟和 USART 时钟 初始化 GPIO并将 GPIO 复用到 USART 上 配置 USART 参数 配置中断控制器并使能 USART 接收中断 使能 USART
最后在 USART 接收中断服务函数实现数据接收和发送。
#include bsp_usart.h/*** brief 配置嵌套向量中断控制器NVIC* param 无* retval 无*/
static void NVIC_Configuration(void)
{NVIC_InitTypeDef NVIC_InitStructure;/* 嵌套向量中断控制器组选择 */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/* 配置USART为中断源 */NVIC_InitStructure.NVIC_IRQChannel DEBUG_USART_IRQ;/* 抢断优先级*/NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 1;/* 子优先级 */NVIC_InitStructure.NVIC_IRQChannelSubPriority 1;/* 使能中断 */NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE;/* 初始化配置NVIC */NVIC_Init(NVIC_InitStructure);
}/*** brief USART GPIO 配置,工作参数配置* param 无* retval 无*/
void USART_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;// 打开串口GPIO的时钟DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);// 打开串口外设的时钟DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);// 将USART Tx的GPIO配置为推挽复用模式GPIO_InitStructure.GPIO_Pin DEBUG_USART_TX_GPIO_PIN;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(DEBUG_USART_TX_GPIO_PORT, GPIO_InitStructure);// 将USART Rx的GPIO配置为浮空输入模式GPIO_InitStructure.GPIO_Pin DEBUG_USART_RX_GPIO_PIN;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING;GPIO_Init(DEBUG_USART_RX_GPIO_PORT, GPIO_InitStructure);// 配置串口的工作参数// 配置波特率USART_InitStructure.USART_BaudRate DEBUG_USART_BAUDRATE;// 配置 针数据字长USART_InitStructure.USART_WordLength USART_WordLength_8b;// 配置停止位USART_InitStructure.USART_StopBits USART_StopBits_1;// 配置校验位USART_InitStructure.USART_Parity USART_Parity_No ;// 配置硬件流控制USART_InitStructure.USART_HardwareFlowControl USART_HardwareFlowControl_None;// 配置工作模式收发一起USART_InitStructure.USART_Mode USART_Mode_Rx | USART_Mode_Tx;// 完成串口的初始化配置USART_Init(DEBUG_USARTx, USART_InitStructure);// 串口中断优先级配置NVIC_Configuration();// 使能串口接收中断USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE); // 使能串口USART_Cmd(DEBUG_USARTx, ENABLE);
}/***************** 发送一个字节 **********************/
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{/* 发送一个字节数据到USART */USART_SendData(pUSARTx,ch);/* 等待发送数据寄存器为空 */while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) RESET);
}/****************** 发送8位的数组 ************************/
void Usart_SendArray( USART_TypeDef * pUSARTx, uint8_t *array, uint16_t num)
{uint8_t i;for(i0; inum; i){/* 发送一个字节数据到USART */Usart_SendByte(pUSARTx,array[i]); }/* 等待发送完成 */while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)RESET);
}/***************** 发送字符串 **********************/
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
{unsigned int k0;do {Usart_SendByte( pUSARTx, *(str k) );k;} while(*(str k)!\0);/* 等待发送完成 */while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)RESET){}
}/***************** 发送一个16位数 **********************/
void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch)
{uint8_t temp_h, temp_l;/* 取出高八位 */temp_h (ch0XFF00)8;/* 取出低八位 */temp_l ch0XFF;/* 发送高八位 */USART_SendData(pUSARTx,temp_h); while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) RESET);/* 发送低八位 */USART_SendData(pUSARTx,temp_l); while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) RESET);
}///重定向c库函数printf到串口重定向后可使用printf函数
int fputc(int ch, FILE *f)
{/* 发送一个字节数据到串口 */USART_SendData(DEBUG_USARTx, (uint8_t) ch);/* 等待发送完毕 */while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) RESET); return (ch);
}///重定向c库函数scanf到串口重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{/* 等待串口输入数据 */while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) RESET);return (int)USART_ReceiveData(DEBUG_USARTx);
}
usart.h
这里面是GPIO 和 USART 的宏定义此开发版USART引脚和TX、RX连接关系如下。这里使用 USART1设定波特率为 115200选定 USART 的 GPIO 为 PA9 和 PA10。 #ifndef __USART_H
#define __USART_H#include stm32f10x.h
#include stdio.h/** * 串口宏定义不同的串口挂载的总线和IO不一样移植时需要修改这几个宏* 1-修改总线时钟的宏uart1挂载到apb2总线其他uart挂载到apb1总线* 2-修改GPIO的宏*/// 串口1-USART1
#define DEBUG_USARTx USART1
#define DEBUG_USART_CLK RCC_APB2Periph_USART1
#define DEBUG_USART_APBxClkCmd RCC_APB2PeriphClockCmd
#define DEBUG_USART_BAUDRATE 115200// USART GPIO 引脚宏定义
#define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOA)
#define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd#define DEBUG_USART_TX_GPIO_PORT GPIOA
#define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_9
#define DEBUG_USART_RX_GPIO_PORT GPIOA
#define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_10#define DEBUG_USART_IRQ USART1_IRQn
#define DEBUG_USART_IRQHandler USART1_IRQHandler// 串口2-USART2
//#define DEBUG_USARTx USART2
//#define DEBUG_USART_CLK RCC_APB1Periph_USART2
//#define DEBUG_USART_APBxClkCmd RCC_APB1PeriphClockCmd
//#define DEBUG_USART_BAUDRATE 115200 USART GPIO 引脚宏定义
//#define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOA)
//#define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd
//
//#define DEBUG_USART_TX_GPIO_PORT GPIOA
//#define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_2
//#define DEBUG_USART_RX_GPIO_PORT GPIOA
//#define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_3//#define DEBUG_USART_IRQ USART2_IRQn
//#define DEBUG_USART_IRQHandler USART2_IRQHandler// 串口3-USART3
//#define DEBUG_USARTx USART3
//#define DEBUG_USART_CLK RCC_APB1Periph_USART3
//#define DEBUG_USART_APBxClkCmd RCC_APB1PeriphClockCmd
//#define DEBUG_USART_BAUDRATE 115200 USART GPIO 引脚宏定义
//#define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOB)
//#define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd
//
//#define DEBUG_USART_TX_GPIO_PORT GPIOB
//#define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_10
//#define DEBUG_USART_RX_GPIO_PORT GPIOB
//#define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_11//#define DEBUG_USART_IRQ USART3_IRQn
//#define DEBUG_USART_IRQHandler USART3_IRQHandler// 串口4-UART4
//#define DEBUG_USARTx UART4
//#define DEBUG_USART_CLK RCC_APB1Periph_UART4
//#define DEBUG_USART_APBxClkCmd RCC_APB1PeriphClockCmd
//#define DEBUG_USART_BAUDRATE 115200 USART GPIO 引脚宏定义
//#define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOC)
//#define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd
//
//#define DEBUG_USART_TX_GPIO_PORT GPIOC
//#define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_10
//#define DEBUG_USART_RX_GPIO_PORT GPIOC
//#define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_11//#define DEBUG_USART_IRQ UART4_IRQn
//#define DEBUG_USART_IRQHandler UART4_IRQHandler// 串口5-UART5
//#define DEBUG_USARTx UART5
//#define DEBUG_USART_CLK RCC_APB1Periph_UART5
//#define DEBUG_USART_APBxClkCmd RCC_APB1PeriphClockCmd
//#define DEBUG_USART_BAUDRATE 115200 USART GPIO 引脚宏定义
//#define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD)
//#define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd
//
//#define DEBUG_USART_TX_GPIO_PORT GPIOC
//#define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_12
//#define DEBUG_USART_RX_GPIO_PORT GPIOD
//#define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_2//#define DEBUG_USART_IRQ UART5_IRQn
//#define DEBUG_USART_IRQHandler UART5_IRQHandlervoid USART_Config(void);
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch);
void Usart_SendString( USART_TypeDef * pUSARTx, char *str);
void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch);#endif /* __USART_H */
中断部分
由于在usart.c的USART_Config函数中使能了 USART 接收中断当 USART 接收到数据就会执行 USART_IRQHandler 函数。
#include stm32f10x_it.h
#include bsp_usart.h
// 串口中断服务函数
void DEBUG_USART_IRQHandler(void)
{uint8_t ucTemp;if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!RESET){ ucTemp USART_ReceiveData(DEBUG_USARTx);USART_SendData(DEBUG_USARTx,ucTemp); }
}串口控制点灯
main.c
这个实验不用接收中断而用查询标志位的方法就是main里面用了switch去判断而不是用中断来判断。 结果就是输入个2小灯发出个绿光。
#include stm32f10x.h
#include ./led/bsp_led.h
#include ./usart/bsp_usart.h static void Show_Message(void);/*** brief 主函数* param 无* retval 无*/
int main(void)
{ char ch;/* 初始化RGB彩灯 */LED_GPIO_Config();/* 初始化USART 配置模式为 115200 8-N-1 */USART_Config();/* 打印指令输入提示信息 */Show_Message();while(1){ /* 获取字符指令 */chgetchar();printf(接收到字符%c\n,ch);/* 根据字符指令控制RGB彩灯颜色 */switch(ch){case 1:LED_RED;break;case 2:LED_GREEN;break;case 3:LED_BLUE;break;case 4:LED_YELLOW;break;case 5:LED_PURPLE;break;case 6:LED_CYAN;break;case 7:LED_WHITE;break;case 8:LED_RGBOFF;break;default:/* 如果不是指定指令字符打印提示信息 */Show_Message();break; } }
}/*** brief 打印指令输入提示信息* param 无* retval 无*/
static void Show_Message(void)
{printf(\r\n 这是一个通过串口通信指令控制RGB彩灯实验 \n);printf(使用 USART 参数为%d 8-N-1 \n,DEBUG_USART_BAUDRATE);printf(开发板接到指令后控制RGB彩灯颜色指令对应如下\n);printf( 指令 ------ 彩灯颜色 \n);printf( 1 ------ 红 \n);printf( 2 ------ 绿 \n);printf( 3 ------ 蓝 \n);printf( 4 ------ 黄 \n);printf( 5 ------ 紫 \n);printf( 6 ------ 青 \n);printf( 7 ------ 白 \n);printf( 8 ------ 灭 \n);
}/*********************************************END OF FILE**********************/usart.c
USART_Config进行USART初始化配置。和上一个实验相似不过没用接收中断。
整个实验流程大致是初始化配置 RGB 彩色灯 GPIO使能 RX 和 TX 引脚 GPIO 时钟和 USART 时钟初始化 GPIO并将 GPIO 复用到 USART 上配置 USART 参数 使能 USART 获取指令输入根据指令控制 RGB 彩色灯。
#include bsp_usart.h/*** brief USART GPIO 配置,工作参数配置* param 无* retval 无*/
void USART_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;// 打开串口GPIO的时钟DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);// 打开串口外设的时钟DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);// 将USART Tx的GPIO配置为推挽复用模式GPIO_InitStructure.GPIO_Pin DEBUG_USART_TX_GPIO_PIN;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(DEBUG_USART_TX_GPIO_PORT, GPIO_InitStructure);// 将USART Rx的GPIO配置为浮空输入模式GPIO_InitStructure.GPIO_Pin DEBUG_USART_RX_GPIO_PIN;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING;GPIO_Init(DEBUG_USART_RX_GPIO_PORT, GPIO_InitStructure);// 配置串口的工作参数// 配置波特率USART_InitStructure.USART_BaudRate DEBUG_USART_BAUDRATE;// 配置 针数据字长USART_InitStructure.USART_WordLength USART_WordLength_8b;// 配置停止位USART_InitStructure.USART_StopBits USART_StopBits_1;// 配置校验位USART_InitStructure.USART_Parity USART_Parity_No ;// 配置硬件流控制USART_InitStructure.USART_HardwareFlowControl USART_HardwareFlowControl_None;// 配置工作模式收发一起USART_InitStructure.USART_Mode USART_Mode_Rx | USART_Mode_Tx;// 完成串口的初始化配置USART_Init(DEBUG_USARTx, USART_InitStructure); // 使能串口USART_Cmd(DEBUG_USARTx, ENABLE);
}/***************** 发送一个字符 **********************/
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{/* 发送一个字节数据到USART */USART_SendData(pUSARTx,ch);/* 等待发送数据寄存器为空 */while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) RESET);
}/***************** 发送字符串 **********************/
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
{unsigned int k0;do {Usart_SendByte( pUSARTx, *(str k) );k;} while(*(str k)!\0);/* 等待发送完成 */while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)RESET){}
}/***************** 发送一个16位数 **********************/
void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch)
{uint8_t temp_h, temp_l;/* 取出高八位 */temp_h (ch0XFF00)8;/* 取出低八位 */temp_l ch0XFF;/* 发送高八位 */USART_SendData(pUSARTx,temp_h); while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) RESET);/* 发送低八位 */USART_SendData(pUSARTx,temp_l); while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) RESET);
}///重定向c库函数printf到串口重定向后可使用printf函数
int fputc(int ch, FILE *f)
{/* 发送一个字节数据到串口 */USART_SendData(DEBUG_USARTx, (uint8_t) ch);/* 等待发送完毕 */while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) RESET); return (ch);
}///重定向c库函数scanf到串口重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{/* 等待串口输入数据 */while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) RESET);return (int)USART_ReceiveData(DEBUG_USARTx);
}
usart.h
进行GPIO 和 USART 宏定义。
#ifndef __USART_H
#define __USART_H#include stm32f10x.h
#include stdio.h/** * 串口宏定义不同的串口挂载的总线不一样移植时需要修改这几个宏*/
#define DEBUG_USARTx USART1
#define DEBUG_USART_CLK RCC_APB2Periph_USART1
#define DEBUG_USART_APBxClkCmd RCC_APB2PeriphClockCmd
#define DEBUG_USART_BAUDRATE 115200// USART GPIO 引脚宏定义
#define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOA)
#define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd#define DEBUG_USART_TX_GPIO_PORT GPIOA
#define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_9
#define DEBUG_USART_RX_GPIO_PORT GPIOA
#define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_10#define DEBUG_USART_IRQ USART1_IRQn
#define DEBUG_USART_IRQHandler USART1_IRQHandlervoid USART_Config(void);
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch);
void Usart_SendString( USART_TypeDef * pUSARTx, char *str);
void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch);#endif /* __USART_H */