##usart.h//串口头文件
#include "stm32f10x.h"
#include <stdio.h>
void usart_init();
void USARTsendbyte(USART_TypeDef* USARTx, uint16_t Data);
void USARTsendbytes(USART_TypeDef* USARTx, char *str);
##usart.c
```c
#include "usart.h"
#include "stm32f10x.h"
void usart_init()
{
GPIO_InitTypeDef gpioinitStructure;
USART_InitTypeDef usartinitStructure;
NVIC_InitTypeDef NVICinitStructure;//串口发送指令控制(中断初始化)
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1, ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVICinitStructure.NVIC_IRQChannel=USART1_IRQn;
NVICinitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVICinitStructure.NVIC_IRQChannelSubPriority=1;
NVICinitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVICinitStructure);
//配置pa9 tx 输出引脚
gpioinitStructure.GPIO_Mode =GPIO_Mode_AF_PP;
gpioinitStructure.GPIO_Pin =GPIO_Pin_9;
gpioinitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Init( GPIOA,&gpioinitStructure);
//配置pa10 rx 输入引脚
gpioinitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING ;
gpioinitStructure.GPIO_Pin =GPIO_Pin_10;
GPIO_Init( GPIOA,&gpioinitStructure);
//配置usart结构体
usartinitStructure.USART_BaudRate=115200;
usartinitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
usartinitStructure.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;
usartinitStructure.USART_Parity=USART_Parity_No;
usartinitStructure.USART_StopBits=USART_StopBits_1;
usartinitStructure.USART_WordLength=USART_WordLength_8b;
USART_Init( USART1, &usartinitStructure);
USART_ITConfig( USART1, USART_IT_RXNE,ENABLE );
USART_Cmd( USART1, ENABLE);
}
//发送字符函数
void USARTsendbyte(USART_TypeDef* USARTx, uint16_t Data)
{
USART_SendData(USARTx, Data);
while(USART_GetFlagStatus( USARTx, USART_FLAG_TXE)==RESET);
}
//发送字符串函数
void USARTsendbytes(USART_TypeDef* USARTx, char *str)
{
uint16_t i=0;
do
{
USARTsendbyte( USARTx,*(str+i));
i++;
}while(*(str+i)!='\0');
while(USART_GetFlagStatus( USARTx, USART_FLAG_TC)==RESET);
}
//用printf发送字符串
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t)ch);
while(USART_GetFlagStatus( USART1, USART_FLAG_TXE)==RESET);
return (ch);
}
##main.c文件
```#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "relay.h"
#include "shake.h"
#include "exti.h"
#include "usart.h"
void delay(uint16_t time)
{
uint16_t i=0;
while(time--)
{
i=12000;
while(i--);
}
}
int main()
{
LED_Init();
usart_init();
// USARTsendbyte( USART1, 'O');//发送字符
// USARTsendbyte( USART1, 'K');
// USARTsendbytes( USART1, "我要拿高薪");//发送字符串
// printf("我要拿高薪");//printf发送字符串
GPIO_SetBits(GPIOA, GPIO_Pin_1);//pa1设置高电平先使其灭
while(1)
{
}
}
void USART1_IRQHandler()//usart1中断来控制感应灯的亮灭
{
char temp;
if(USART_GetITStatus( USART1, USART_IT_RXNE )!=RESET)
{
temp=USART_ReceiveData( USART1);
if(temp=='O')
{
GPIO_ResetBits( GPIOA, GPIO_Pin_1);
USARTsendbytes(USART1, "LED IS OK");
}
if(temp=='C')
{
GPIO_SetBits( GPIOA, GPIO_Pin_1);
USARTsendbytes(USART1, "LED IS DOWN");
}
}
}