1.main.c
#include "stm32f10x.h"
#include "lcd.h"
#include "usart.h"
u32 ntime=0;
unsigned char Str1[16];
u8 p=0;
void USARTPro(void);
void Delay_KEY(unsigned int ms);
int main(void)
{
SysTick_Config(8000);
USARTInit();
STM3210B_LCD_Init();
LCD_Clear(Blue);
LCD_SetBackColor(Blue);
LCD_SetTextColor(White);
while(1)
{
USARTPro();
}
}
void USARTPro(void)
{
u16 i;
if(Rx_flag==1)
{
Delay_KEY(10);//必有
Rx_flag=0;
RxCounter=0;
if(RxBuffer[0]=='O'&&RxBuffer[1] =='K'&&RxBuffer[2] ==0 )
{
sprintf((char*)Str1, "ok\n\r");
USART_SendString(Str1);
}
else
sprintf((char*)Str1, "error\n\r");
USART_SendString(Str1);
}
for(i=0;i<10;i++)
{
RxBuffer[i]=0;
}//清除内容
}
void SysTick_Handler(void)
{
ntime++;
if(ntime==1000)
{
ntime=0;
USART_SendString ("Welcome to GXCT\r\n");
}
}
void Delay_KEY(unsigned int ms)
{
unsigned int i, j;
for(i=0; i<ms; i++)
// for(j=0; j<7992; j++); // SYSCLK = 72MHz
for(j=0; j<1598; j++); // SYSCLK = 8MHz
}
2.usart.c
#include "stm32f10x.h"
#include "usart.h"
s8 RxBuffer[RxBufferSize]={0};
uint8_t RxCounter=0;
uint8_t Rx_flag = 0;
void USARTInit(void)
{
USART_InitTypeDef u;
GPIO_InitTypeDef g;
NVIC_InitTypeDef v;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
g.GPIO_Pin = GPIO_Pin_2;//TX
g.GPIO_Mode = GPIO_Mode_AF_PP;
g.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &g);
g.GPIO_Pin = GPIO_Pin_3;//RX
g.GPIO_Mode = GPIO_Mode_IN_FLOATING;
g.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &g);
u.USART_BaudRate=9600;
u.USART_WordLength=USART_WordLength_8b;
u.USART_StopBits=USART_StopBits_1;
u.USART_Parity=USART_Parity_No;
u.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;//写入和读取模式都开启
u.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//不需要硬件控制
USART_Init(USART2, &u);
v.NVIC_IRQChannel= USART2_IRQn;
v.NVIC_IRQChannelPreemptionPriority = 1;
v.NVIC_IRQChannelSubPriority = 1;
v.NVIC_IRQChannelCmd= ENABLE;
NVIC_Init(&v);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
USART_Cmd(USART2,ENABLE);
USART_ITConfig( USART2, USART_IT_RXNE,ENABLE);
}
void USART_SendString(unsigned char *str)
{
uint8_t index = 0;
do
{
USART_SendData(USART2,str[index]);
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET);
index++;
}
while(str[index] != 0); //检查字符串结束标志
}
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
RxBuffer[RxCounter] = USART_ReceiveData(USART2);
RxCounter++;
Rx_flag=1;
if(RxCounter == 10)
{
RxCounter = 0;
}
}
}
3.usart.h
#ifndef _USART_H
#define _USART_H
#define RxBufferSize 10
extern s8 RxBuffer[RxBufferSize];
extern uint8_t RxCounter;
extern uint8_t Rx_flag;
void USARTInit(void);
void USART_SendString(unsigned char *str);
#endif