STM32——利用串口实现LED1的亮灭

要实现接收串口字符串信息就要进行数据对比,本来使用的是for循环

#include 
int main()
{
	char str[256];
	scanf("%s",str); 
	int a,b,c;
	for(int m=0;m<=254;m++)
		{
			if(str[m]=='L'&str[m+1]=='E'&str[m+2]=='D')
				return printf("LED亮");	
		}	
}

特意在devC++上测试了一下可行性,发现可行然后就放到了工程主函数里面

经过测试,灯是亮了但是发送了20多次,然后询问学长,学了一下strstr函数,只能说是真的好用,上面那一堆变成了两行。

						if(strstr((const char *)str,"LED"))//判断参数二是否是1的子串
						{
							LED1_TOGGLE;//LED1状态翻转翻转
						}

完整主函数是这样的 

/* 包含头文件 ----------------------------------------------------------------*/
#include "stm32f10x.h"
#include "usartx.h"
#include "led.h"
#include 

uint8_t Rxflag=0;
uint8_t ucTemp;

int main(void)
{  
  uint8_t ucaRxBuf[256];
	uint16_t usRxCount;
  LED_GPIO_Init();
  /* USART 配置模式为 115200 8-N-1,中断接收 */
  USARTx_Init();
  
  Usart_SendString("这是一个串口中断接收回显实验\n");
	Usart_SendString("输入数据并以回车键结束\n");
  
	/* 简单的通信协议,遇到回车换行符认为1个命令帧 */  
	usRxCount = 0;
  
  /* 无限循环 */
  while (1)
  { 

		if(Rxflag)
		{
			if (usRxCount < sizeof(ucaRxBuf))//sizeof为占用空间字节数关键字
			{
				ucaRxBuf[usRxCount++] = ucTemp;
			}
			else
			{
				usRxCount = 0;
			}
			
			/* 遇到换行字符,认为接收到一个命令 */
			if (ucTemp == 0x0A)	/* 换行字符 */
			{		
//				Usart_SendStr_length(ucaRxBuf,usRxCount);//串口发送字符串
//				usRxCount = 0;
					unsigned char str[256];
					for(unsigned int m=0;m

如果大家有更好的办法欢迎讨论。 

你可能感兴趣的:(嵌入式硬件,c语言)