微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > stm32 NRF24L01+USART搞定有线和无线通信

stm32 NRF24L01+USART搞定有线和无线通信

时间:11-19 来源:互联网 点击:

否有效来向串口发送相应的数据。那么我们的问题又来了:这个speed_change_flag是在哪里被改变的呢?这个我们就要参看窗口回调函数了!这里的窗口回调函数是窗口动作响应函数(就像安卓开发里的按钮监听或MFC里的按钮点击事件等),一旦窗口里的控件有相应的触发动作就会调用该函数,并把事件类型封装在WM_MESSAGE里传过来,在该函数里对该消息进行解析并作出相应的动作即可(非常像Win32!!!我怀疑做这个uc-GUI的人有copy微软的嫌疑,?(^∇^*)随便猜测,如有雷同,纯属巧合)。这样我们就很容易找到send按钮的监听用于将数据通过NRF24L01发送出去的相关操作,也就明白了滑动条监听用来改变speed1~5.上面说了这么多,少了介绍整个界面是怎么建立的了~其实整个窗体的布局都要放在一个结构体里,然后在fun()函数里调用hWin = GUI_CreateDialogBox(aDialogCreate, GUI_COUNTOF(aDialogCreate), _cbCallback, 0, 0, 0);根据定义的窗口资源和回调函数进行窗体的建立~这样我们就圆满地理解了stm32基于uc-OS并搭载uc-GUI的运行逻辑啦!



1 void Fun(void) {   2   GUI_CURSOR_Show();                                        //打开鼠标图形显示  3   4   /* 建立对话框时,包含了资源列表,资源数目, 并且指定了用于动作响应的回调函数  */5   hWin = GUI_CreateDialogBox(aDialogCreate, GUI_COUNTOF(aDialogCreate), _cbCallback, 0, 0, 0);6 7   FRAMEWIN_SetFont(hWin, &GUI_FontComic18B_1);                  //对话框字体设置 8   FRAMEWIN_SetClientColor(hWin, GUI_BLACK);                      //对话框的窗体颜色是黑色9   memcpy(tx_buf, "1234567890abcdefghij!@#$%^&*()-=", 32);   //将长度为32字节的发送字符串拷贝到发送缓冲区,10   memcpy(rx_buf, "", 32);                                    //将接收缓存区清空11  12   /* 获得文本框句柄 */        13   text1 = WM_GetDialogItem(hWin, GUI_ID_TEXT0);                //获得对话框里GUI_ID_TEXT0项目(文本框Send Text Area)的句柄14   text2 = WM_GetDialogItem(hWin, GUI_ID_TEXT1);                //获得对话框里GUI_ID_TEXT1项目(文本框Receive Text Area)的句柄15   text3 = WM_GetDialogItem(hWin, GUI_ID_TEXT2);                //获得对话框里GUI_ID_TEXT2项目(文本框2M BPS)的句柄16   text4 = WM_GetDialogItem(hWin, GUI_ID_TEXT3);                //获得对话框里GUI_ID_TEXT3项目(文本框1M BPS)的句柄17   text6 = WM_GetDialogItem(hWin, GUI_ID_TEXT5);                //获得对话框里GUI_ID_TEXT5项目(文本框250K BPS)的句柄18   text5 = WM_GetDialogItem(hWin, GUI_ID_TEXT4);                //获得对话框里GUI_ID_TEXT4项目(状态字符文本框)的句柄  19   /* 设置文本框字体 */20   TEXT_SetFont(text1,pFont);                                //设置对话框里文本框Send Text Area的字体21   TEXT_SetFont(text2,pFont);                                //设置对话框里文本框Receive Text Area的字体22   TEXT_SetFont(text3,pFont18);                                //设置对话框里文本框2M BPS的字体23   TEXT_SetFont(text4,pFont18);                                //设置对话框里文本框1M BPS的字体24   TEXT_SetFont(text6,pFont18);                                //设置对话框里文本框250K BPS的字体25   TEXT_SetFont(text5,pFont);                                //设置对话框里状态字符文本框的字体26   /* 设置文本框颜色 */27   TEXT_SetTextColor(text1,GUI_GREEN);                        //设置对话框里文本框Send Text Area的字体颜色28   TEXT_SetTextColor(text2,GUI_GREEN );                        //设置对话框里文本框Receive Text Area的字体颜色29   TEXT_SetTextColor(text3,GUI_YELLOW);                        //设置对话框里文本框2M BPS的字体颜色30   TEXT_SetTextColor(text4,GUI_YELLOW);                        //设置对话框里文本框1M BPS的字体颜色31   TEXT_SetTextColor(text6,GUI_YELLOW);                       //设置对话框里文本框250K BPS的字体颜色32   TEXT_SetTextColor(text5,GUI_YELLOW);                        //设置对话框里状态字符文本框的字体颜色33   TEXT_SetBkColor(text5,GUI_BLUE);                            //设置对话框里状态字符文本框的背景颜色34 35   /* 编辑框相关 */36   edit1 = WM_GetDialogItem(hWin, GUI_ID_EDIT1);                //获得对话框里GUI_ID_EDIT1项目(编辑框 发送字符串显示区)的句柄37   EDIT_SetFont(edit1,pFont18);                                //设置对话框里编辑框 发送字符串显示区的字体38   EDIT_SetText(edit1,(const char *)tx_buf);                    //设置对话框里编辑框 发送字符串显示区的字符串39   edit2 = WM_GetDialogItem(hWin, GUI_ID_EDIT2);                //获得对话框里GUI_ID_EDIT2项目(编辑框 接收字符串显示区)的句柄40   EDIT_SetFont(edit2,pFont18);                                //设置对话框里编辑框 接收字符串显示区的字体41   EDIT_SetText(edit2,(const char *)rx_buf);                    //设置对话框里编辑框 接收字符串显示区的字符串42 43   /* 按钮相关 */44   bt[0]=WM_GetDialogItem(hWin,GUI_ID_BUTTON0);                //获得对话框里GUI_ID_BUTTON0项目(按键SEND)的句柄45   bt[1]=WM_GetDialogItem(hWin, GUI_ID_BUTTON2);                //获得对话框里GUI_ID_BUTTON2项目(按键CLEAR)的句柄46   BUTTON_SetFont(bt[0],pFont);                                //设置对话框里按键SEND的字体47   BUTTON_SetFont(bt[1],pFont);                                //设置对话框里按键CLEAR的字体48   BUTTON_SetTextColor(bt[0],0,GUI_WHITE);                     //设置对话框里按键SEND未被按下的字体颜色49   BUTTON_SetTextColor(bt[1],0,GUI_WHITE);                    //设置对话框里按键CLEAR未被按下的字体颜色50 51   /* List相关 */            52   nrf_Pipe=0;                                                //NRF24L01初始发射通道设置为053   list1 = WM_GetDialogItem(hWin, GUI_ID_LISTBOX0);            //获得对话框里GUI_ID_LISTBOX0项目(列表框-通道选择)的句柄     54   LISTBOX_SetText(list1, _apListBox);                        //设置对话框里列表框-通道选择里的条目55   LISTBOX_SetFont(list1,pFont18);                            //设置对话框里列表框-通道选择的字体56   LISTBOX_SetSel(list1,nrf_Pipe);                            //设置对话框里列表框-通道选择的焦点选择57   SCROLLBAR_CreateAttached(list1, SCROLLBAR_CF_VERTICAL);    //设置对话框里列表框-通道选择的卷动方向为下拉        58 59   /* Radio按钮相关 */        60   rd0 = WM_GetDialogItem(hWin, GUI_ID_RADIO0);                //获得对话框里GUI_ID_RADIO0项目(点选框-速率选择)的句柄61   nrf_baud=0;                                                //NRF24L01速率 初始为2MPS62   RADIO_SetValue(rd0,0);                                    //设置对话框里点选框-速率选择的焦点选择63   RX_Mode();                                                //NRF24L01进入接收模式 64  65   /* 获得slider部件的句柄 */    66   slider1 = WM_GetDialogItem(hWin, GUI_ID_SLIDER1);67   slider2 = WM_GetDialogItem(hWin, GUI_ID_SLIDER2);68   slider3 = WM_GetDialogItem(hWin, GUI_ID_SLIDER3);69   slider4 = WM_GetDialogItem(hWin, GUI_ID_SLIDER4);70   slider5 = WM_GetDialogItem(hWin, GUI_ID_SLIDER5);71   /* 设置slider部件的取值范围-8-8*/  72   SLIDER_SetRange(slider1,-8,8);    73   SLIDER_SetRange(slider2,-8,8);74   SLIDER_SetRange(slider3,-8,8);75   SLIDER_SetRange(slider4,-8,8);76   SLIDER_SetRange(slider5,-8,8);77   /* 设置slider部件的值*/      78   SLIDER_SetValue(slider1,0);  79   SLIDER_SetValue(slider2,0);    80   SLIDER_SetValue(slider3,0);  81   SLIDER_SetValue(slider4,0);  82   SLIDER_SetValue(slider5,0);  83   /* 获取文本框句柄 */84   text_speed1 = WM_GetDialogItem(hWin, GUI_ID_TEXT_SPEED1);    85   text_speed2 = WM_GetDialogItem(hWin, GUI_ID_TEXT_SPEED2);    86   text_speed3 = WM_GetDialogItem(hWin, GUI_ID_TEXT_SPEED3);    87   text_speed4 = WM_GetDialogItem(hWin, GUI_ID_TEXT_SPEED4);    88   text_speed5 = WM_GetDialogItem(hWin, GUI_ID_TEXT_SPEED5);    89   /* 设置文本框字体 */90   TEXT_SetFont(text_speed1,pFont18);91   TEXT_SetFont(text_speed2,pFont18);92   TEXT_SetFont(text_speed3,pFont18);93   TEXT_SetFont(text_speed4,pFont18);94   TEXT_SetFont(text_speed5,pFont18);                                    95   /* 设置文本框颜色 */96   TEXT_SetTextColor(text_speed1,GUI_YELLOW);        97   TEXT_SetTextColor(text_speed2,GUI_YELLOW);        98   TEXT_SetTextColor(text_speed3,GUI_YELLOW);        99   TEXT_SetTextColor(text_speed4,GUI_YELLOW);        100   TEXT_SetTextColor(text_speed5,GUI_YELLOW);        101 102   speed_change_flag=0;103 104   while (1)105   {               106     if(Rx_Succ==1){                                            //当NRF24L01接收到有效数据107         EDIT_SetText(edit2,(const char *)rx_buf);            //将接收缓冲区的字符写入到接收字符编辑框内108         TEXT_SetText(text5,(const char *)status_buf);        //将状态文本缓冲区的字符写入到状态文本框内109         Rx_Succ=0; 110 //        for(i=0;i

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top