蓝桥杯接收字符串并判断

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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值