串口通讯,大神们救我!

2019-07-21 03:47发布

事情是这样的;
简单的说一下要实现的功能
就是要用上位机 通过串口发送字符(命令)
下位机要识别字符(命令)然后做出相应的动作
比如说上位机发送LED0=0;然后下位机识别并且点亮LED0;点亮LED后返回是否操作成功;
再比如上位机通过串口发送0x33,因为0x33是字符型的,所以下位机代码中要做处理,把0x33(字符型)换成0x33(16进制型),然后再赋值判断
例:data=0x33(字符型)换成16进制
        temp=data;
        if(temp==0x33)
        {
                   LED0=~LED0
        }
求大神们教我;如果我说的不够详细的 可以回复问我;
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
714727136
1楼-- · 2019-07-21 04:53
[mw_shl_code=c,true]#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "usart.h" //ALIENTEK????STM32??·?°????é4 //?®?????é //?????§????www.openedv.com //?????????í??×????????????? int main(void) { u8 t; u8 len; u16 times=0; delay_init(); //???±?????????? NVIC_Configuration(); //?è??NVIC????·?×é2:2??????????????2???ì???????? uart_init(9600); //?®??????????9600 LED_Init(); //LED?????????? KEY_Init(); //????????°??ü?????????????? while(1) { if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3fff;//?????????????????????¤?? for(t=0;t<len;t++) { USART_SendData(USART1, USART_RX_BUF[t]);//?ò?®??1·??????? while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//????·????á?? } if(USART_RX_BUF[0]==0x33) { LED0=!LED0; } printf(" ");//???????? USART_RX_STA=0; }else { times++; if(times%30==0)LED1=!LED1;//????LED,?á??????????????. delay_ms(10); } } } [/mw_shl_code] 刚刚喝可乐的突发奇感    
既然串口接受的数据存在  [mw_shl_code=c,true]USART_RX_BUF[/mw_shl_code] 里面
所以我直接判断 USART_RX_BUF 里面的数据 哈哈哈 太开心了  果然还是要靠自己啊
civic7366
2楼-- · 2019-07-21 08:53
你要問啥東東...不就照你講的那樣做就好了?

如果上位機傳的東西是字串(字符) 可以直接用emp=='3' 不用轉啥16進制
714727136
3楼-- · 2019-07-21 12:41
 精彩回答 2  元偷偷看……
忧伤乐观人
4楼-- · 2019-07-21 14:45
回复【3楼】714727136:
---------------------------------
回复【3楼】714727136:
---------------------------------
就是ascii,这里是的‘3’与3是不一样的
714727136
5楼-- · 2019-07-21 18:46
回复【4楼】忧伤乐观人:
---------------------------------
你好!那该怎判断直接用if是不行的吧
正点原子
6楼-- · 2019-07-22 00:15
回复【5楼】714727136:
---------------------------------
楼主好好学习下C语言吧,这是基础知识啊

一周热门 更多>