stm32f1串口通信(两串口之间互相通信以及USART_SendData函数的bug)

stm32f1串口通信(两串口之间互相通信以及USART_SendData函数的bug)

简要功能

串口识别另一串口的内容然后进行相应回应(以“521” “1314”为例)

主要函数介绍

(相关串口配置初始化网上代码很多,几乎也都差不多,我在这里也不介绍了,但是需要注意的是串口二的配置串口时钟和GPIOA的时钟不在一条总线上,两串口中断优先级也会有一定的影响。)

  1. 串口中断接受立即发送

 *void USART1_IRQHandler(void)                	//串口1中断服务程序
{
	u8 Res;
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //mcu接受数据,接收中断
	{
		Res =USART_ReceiveData(USART1);	//读取通过串口1接收到的数据
		USART_SendData(USART2, Res);     //通过串口1接收到的数据,发送给串口2	  
          }		 
}*  

串口二接收发送也是一样 。
需要注意的是 RXNE以及IDLE中断,在RXNE中断中接收串口数据,每次接收一个字节并存至缓存区,而IDLE是直到一帧数据存储完成IDLE置1,产生IDLE中断
*接收一个数据判断条件:

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

*接收一帧数据判断条件:

*if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)
也就是说接收到的数据必须是0x0d 0x0a结尾
2.判断接收的内容是否为指定字符串
strstr函数
函数原型 : strstr(str1,str2)
功能: 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
strchr函数
函数原型:char *strchr(const char *str, int c)
功能:在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置
该函数返回在字符串 str 中第一次出现字符 c 的位置,如果未找到该字符则返回 NULL。
头文件: 两个函数均是 #include <string.h>
例如判断接收到的CH中有没有“521”,如果有把字符串str2发送给串口一

            **if(strstr((char *)CH,"521"))
            for(t = 0; str2[t] != 0; t++)
            {
                USART_SendData(USART1,str2[t]);
                Delay(300);       //加延时的目的下面会有讲解
            }**

            简单的判断一般这样就可以实现了,检测相应的字符让开发板做出不一样回应是一样的
            例如		
     if(strstr((char *)req_payload, "redled"))		//搜索"redled"
     {
	    	if(num == 1)								//控制数据如果为1,代表开
		{
			Led4_Set(LED_ON);
		}
		else if(num == 0)							//控制数据如果为0,代表关
		{
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值