久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4204|回復: 3
打印 上一主題 下一主題
收起左側

STM32 uIP1.0網絡例程源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:295864 發表于 2018-5-12 19:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
STM野火版學習資料

單片機源程序如下:
  1. /****************************************************************************
  2. * Copyright (C), 2010 奮斗嵌入式工作室
  3. * 本例程在奮斗版STM32開發板V3上調試通過           
  4. * 文件名: main.c
  5. * 內容簡述:
  6. *                本例程移植uIP-1.0協議棧,演示開發板和PC間的TCP通信。自定義了一個簡單的應用層
  7. *        通信協議。本例程實現的功能有:
  8. *                (1)通過PC機控制板子上的LED;
  9. *                (2)實現了一個簡單的Web服務器。
  10. *            奮斗版STM32開發板選用的網卡芯片ENC28J60,10M帶寬。
  11. *                本例程設置的缺省IP地址是 192.168.1.15,默認的TCP服務器監聽端口是1200, WEB服務器監聽端口80,
  12.             UDP服務器監聽端口2000。
  13. *                開發板工作在TCP服務器模式。PC機工作在TCP客戶端模式。
  14. *                 PC機上需要運行網絡調試助手軟件。
  15. *        用戶可以做如下測試:
  16. *        (1)ping 試驗 (ICMP)
  17. *                點擊windows 開始-運行,執行cmd命令,然后在dos窗口輸入 ping 192.168.1.15
  18. *                應該看到如下結果:
  19. *                        Reply from 192.168.1.15: bytes=32 time<1ms TTL=128
  20. *                        Reply from 192.168.1.15: bytes=32 time<1ms TTL=128
  21. *                        Reply from 192.168.1.15: bytes=32 time<1ms TTL=128
  22. *                        Reply from 192.168.1.15: bytes=32 time<1ms TTL=128
  23. *
  24. *        (2)PC機的TCP客戶端控制開發板上的LED試驗  (TCP服務器)
  25. *                運行網絡調試助手軟件,端口選擇1200,服務器IP地址選擇192.168.1.15, 協議類型選擇TCP客戶端,
  26.     點擊連接按鈕,在命令輸入窗口輸入控制LED的命令字符串,然后點擊發送,開發板上對應的LED燈會發生
  27.         變化。
  28. *                命令代碼如下: (末尾無0x00和回車字符)
  29. *                ledon 1     ----- 點亮LED1
  30. *                ledoff 1    ----- 關閉LED1
  31. *                ledon 2     ----- 點亮LED2
  32. *                ledoff 2    ----- 關閉LED2
  33. *                ledon 3     ----- 點亮LED3
  34. *                ledoff 3    ----- 關閉LED3
  35. *
  36.     (3)WEB網頁控制開發板上的LED試驗  (WEB服務器)
  37.                  打開IE瀏覽器,在地址欄輸入http://192.168.1.15  可以看到基于uIP的Web測試頁面
  38.              在對話框輸入1-3,點確定按鈕,可以控制相應的LED點亮。
  39.                  網頁保存在httpd-fsdata.c的data_index_html數組里, 是通過amo的編程小工具集合轉換的,可以在奮斗論壇下載到。
  40.         (4)UDP服務器實驗
  41.                  本地UDP端口默認是2000, 遠端UDP可以直接連接本地端口,并進行通信
  42.                  命令代碼如下: (末尾無0x00和回車字符)
  43.                  getname     ------返回板子的信息
  44. *                 ledon 1     ----- 點亮LED1
  45. *                 ledoff 1    ----- 關閉LED1
  46. *                 ledon 2     ----- 點亮LED2
  47. *                 ledoff 2    ----- 關閉LED2
  48. *                 ledon 3     ----- 點亮LED3
  49. *                 ledoff 3    ----- 關閉LED3
  50. *
  51. * 文件歷史:
  52. * 版本號  日期       作者    說明
  53. *
  54. */

  55. #include "stm32f10x.h"
  56. #include "stm32f10x_usart.h"
  57. #include "stm32f10x_exti.h"
  58. #include "misc.h"
  59. #include <stdio.h>         
  60. #include "systick.h"


  61. #include "uip.h"
  62. #include "uip_arp.h"
  63. #include "tapdev.h"
  64. #include "timer.h"
  65. #include "enc28j60.h"       
  66. #include  <stdarg.h>
  67. #define BUF ((struct uip_eth_hdr *)&uip_buf[0])       
  68. #define ETH_rec_f GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)          //ENC28J60接收幀完成中斷腳


  69. void InitNet(void);       
  70. void UipPro(void);
  71. void Delay(vu32 nCount);
  72. void GPIO_Configuration(void);
  73. void RCC_Configuration(void);
  74. void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...);
  75. char *itoa(int value, char *string, int radix);
  76. void eth_poll(void);

  77. unsigned short net_time05=0;
  78. unsigned short net_time10=0;
  79. unsigned char net_timeover05=0;
  80. unsigned char net_timeover10=0;
  81. unsigned char ETH_INT=0;


  82. extern void SPI1_Init(void);
  83. /****************************************************************************
  84. * 名    稱:void NVIC_Configuration(void)
  85. * 功    能:中斷源配置
  86. * 入口參數:無
  87. * 出口參數:無
  88. * 說    明:
  89. * 調用方法:無
  90. ****************************************************************************/
  91. void NVIC_Configuration(void)
  92. {
  93.   NVIC_InitTypeDef NVIC_InitStructure;
  94.   EXTI_InitTypeDef EXTI_InitStructure;
  95.   /* Configure one bit for preemption priority */
  96.   /* 優先級組 說明了搶占優先級所用的位數,和子優先級所用的位數   在這里是1, 7 */   
  97.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  98.   
  99.   /* Enable the EXTI2 Interrupt */
  100.   NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;                                 //外部中斷2
  101.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;             //搶占優先級 0
  102.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                         //子優先級0  
  103.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                 //使能
  104.   NVIC_Init(&NVIC_InitStructure);

  105.   //用于配置AFIO外部中斷配置寄存器AFIO_EXTICR1,用于選擇EXTI2外部中斷的輸入源是PE2。
  106.   GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);     //外部中斷配置AFIO--ETXI2

  107.   EXTI_InitStructure.EXTI_Line = EXTI_Line1;                                          //PE2 作為鍵盤的行線。檢測狀態
  108.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                          //中斷模式
  109.   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;                  //下降沿觸發
  110.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  111.   EXTI_Init(&EXTI_InitStructure);
  112. }
  113. /****************************************************************************
  114. * 名    稱:void Usart1_Init(void)
  115. * 功    能:串口1初始化函數
  116. * 入口參數:無
  117. * 出口參數:無
  118. * 說    明:
  119. * 調用方法:無
  120. ****************************************************************************/
  121. void Usart1_Init(void)
  122. {
  123.   GPIO_InitTypeDef GPIO_InitStructure;
  124.   USART_InitTypeDef USART_InitStructure;

  125.   RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 , ENABLE);                         //使能串口1時鐘

  126.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                                                  //USART1 TX
  127.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  128.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                     //復用推挽輸出
  129.   GPIO_Init(GPIOA, &GPIO_InitStructure);                                                     //A端口

  130.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                                          //USART1 RX
  131.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                            //復用開漏輸入
  132.   GPIO_Init(GPIOA, &GPIO_InitStructure);                                                  //A端口

  133.   USART_InitStructure.USART_BaudRate = 115200;                                                //速率115200bps
  134.   USART_InitStructure.USART_WordLength = USART_WordLength_8b;                //數據位8位
  135.   USART_InitStructure.USART_StopBits = USART_StopBits_1;                        //停止位1位
  136.   USART_InitStructure.USART_Parity = USART_Parity_No;                                //無校驗位
  137.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;   //無硬件流控
  138.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                                        //收發模式

  139.   /* Configure USART1 */
  140.   USART_Init(USART1, &USART_InitStructure);                                                        //配置串口參數函數   
  141.    /* Enable the USART1 */
  142.   USART_Cmd(USART1, ENABLE);       
  143.   
  144. }

  145. /****************************************************************************
  146. * 名    稱:void RCC_Configuration(void)
  147. * 功    能:系統時鐘配置為72MHZ, 外設時鐘配置
  148. * 入口參數:無
  149. * 出口參數:無
  150. * 說    明:
  151. * 調用方法:無
  152. ****************************************************************************/
  153. void RCC_Configuration(void)
  154. {
  155.    SystemInit();
  156.    RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO  , ENABLE);  

  157. }
  158. /****************************************************************************
  159. * 名    稱:int main(void)
  160. * 功    能:程序入口
  161. * 入口參數:無
  162. * 出口參數:無
  163. * 說    明:
  164. * 調用方法:無
  165. ****************************************************************************/
  166. int main(void)
  167. {
  168.         RCC_Configuration();                                 //系統時鐘設置
  169.         NVIC_Configuration();
  170.         GPIO_Configuration();                //IO口初始化
  171.         Usart1_Init();                       //串口1初始化

  172.         /* 配置systic作為1ms中斷 */
  173.         if (SysTick_Config(72000))                     //時鐘節拍中斷時1ms一次  用于定時
  174.    {
  175.     /* Capture error */
  176.      while (1);
  177.    }                  
  178.         /* 顯示例程Logo */
  179.     USART_OUT(USART1,"**** (C) COPYRIGHT 2011 奮斗嵌入式開發工作室 *******\r\n");              //向串口1發送開機字符。
  180.     USART_OUT(USART1,"*                                                 *\r\n");           
  181.     USART_OUT(USART1,"*     奮斗版STM32開發板基于uIP1.0的以太網實驗     *\r\n");  
  182.     USART_OUT(USART1,"*                                                 *\r\n");                     
  183.     USART_OUT(USART1,"*     MCU平臺:STM32F103VET6                       *\r\n");           
  184.     USART_OUT(USART1,"*     以太網硬件:ENC28J60                         *\r\n");                     
  185.     USART_OUT(USART1,"*     固件庫:3.5                                 *\r\n");           
  186.     USART_OUT(USART1,"*     例程版本: 0.2                               *\r\n");  
  187.     USART_OUT(USART1,"*     奮斗STM32店鋪:ourstm.taobao.com            *\r\n");               
  188.     USART_OUT(USART1,"*     奮斗STM32論壇:www.ourstm.net  QQ:9191274  *\r\n");   
  189.     USART_OUT(USART1,"*                                                 *\r\n");                    
  190.     USART_OUT(USART1,"***************************************************\r\n");         
  191.                                
  192.         SPI1_Init();
  193.    
  194.         InitNet();                /* 初始化網絡設備以及UIP協議棧,配置IP地址 */

  195.         /* 創建一個TCP監聽端口和http監聽端口,端口號為1200,80 */
  196.         uip_listen(HTONS(1200));
  197.         uip_listen(HTONS(80));         
  198.         while (1)
  199.         {       
  200.                 /* 處理uip事件,必須插入到用戶程序的循環體中 */
  201.                 UipPro();                          //中斷觸發讀取網絡接收緩存
  202.                 eth_poll();           //定時查詢TCP及UDP連接收發狀態        ARP表更新, 并響應
  203.         }
  204. }
  205. /****************************************************************************
  206. * 名    稱:void eth_poll(void)
  207. * 功    能:定時查詢TCP連接收發狀態        ARP表更新, 并響應
  208. * 入口參數:無
  209. * 出口參數:無
  210. * 說    明:
  211. * 調用方法:無
  212. ****************************************************************************/
  213. void eth_poll(void){
  214.         unsigned char i=0;
  215.         if(net_timeover05==1)                        /* 0.5秒定時器超時 */
  216.         {
  217.                 net_time05=0;
  218.                 net_timeover05=0;                        /* 復位0.5秒定時器 */

  219.                 /* 輪流處理每個TCP連接, UIP_CONNS缺省是10個 */
  220.                 for(i = 0; i < UIP_CONNS; i++)
  221.                 {
  222.                         uip_periodic(i);                /* 處理TCP通信事件 */
  223.                         /*
  224.                                 當上面的函數執行后,如果需要發送數據,則全局變量 uip_len > 0
  225.                                 需要發送的數據在uip_buf, 長度是uip_len  (這是2個全局變量)
  226.                         */
  227.                         if(uip_len > 0)
  228.                         {
  229.                                 uip_arp_out();                //加以太網頭結構,在主動連接時可能要構造ARP請求
  230.                                 tapdev_send();                //發送數據到以太網(設備驅動程序)
  231.                         }
  232.                 }

  233.         #if UIP_UDP
  234.                 /* 輪流處理每個UDP連接, UIP_UDP_CONNS缺省是10個 */
  235.                 for(i = 0; i < UIP_UDP_CONNS; i++)
  236.                 {
  237.                         uip_udp_periodic(i);        /*處理UDP通信事件 */
  238.                         /* 如果上面的函數調用導致數據應該被發送出去,全局變量uip_len設定值> 0 */
  239.                         if(uip_len > 0)
  240.                         {
  241.                                 uip_arp_out();                //加以太網頭結構,在主動連接時可能要構造ARP請求
  242.                                 tapdev_send();                //發送數據到以太網(設備驅動程序)
  243.                         }
  244.                 }
  245.         #endif /* UIP_UDP */

  246.                 /* 每隔10秒調用1次ARP定時器函數 用于定期ARP處理,ARP表10秒更新一次,舊的條目會被拋棄*/
  247.                 if (net_timeover10==1)
  248.                 {
  249.                         net_time10=0;
  250.                         net_timeover10=0;                /* 復位10秒定時器 */
  251.                         uip_arp_timer();
  252.                 }
  253.         }
  254. }
  255. /*******************************************************************************
  256. *        函數名:UipPro
  257. *        輸  入:
  258. *        輸  出:
  259. *        功能說明:中斷觸發讀取網絡接收緩存
  260. ********************************************************************/
  261. void UipPro(void)
  262. {
  263.         if(ETH_INT==1){                                        //當網絡接收到數據時,會產生中斷
  264.                 rep:;
  265.                 ETH_INT=0;
  266.                 uip_len = tapdev_read();        //從網絡設備讀取一個IP包,返回數據長度
  267.                 if(uip_len > 0)                            //收到數據
  268.                 {
  269.                         /* 處理IP數據包(只有校驗通過的IP包才會被接收) */
  270.                         if(BUF->type == htons(UIP_ETHTYPE_IP))   //是IP包嗎?
  271.                         {
  272.                                 uip_arp_ipin();                   //去除以太網頭結構,更新ARP表
  273.                                 uip_input();                   //IP包處理
  274.                                 /*
  275.                                         當上面的函數執行后,如果需要發送數據,則全局變量 uip_len > 0
  276.                                         需要發送的數據在uip_buf, 長度是uip_len  (這是2個全局變量)
  277.                                 */
  278.                                 if (uip_len > 0)                //有帶外回應數據
  279.                                 {
  280.                                         uip_arp_out();                //加以太網頭結構,在主動連接時可能要構造ARP請求
  281.                                         tapdev_send();                //發送數據到以太網(設備驅動程序)
  282.                                 }
  283.                         }
  284.                         /* 處理arp報文 */
  285.                         else if (BUF->type == htons(UIP_ETHTYPE_ARP))        //是ARP請求包
  286.                         {
  287.                                 uip_arp_arpin();                //如是是ARP回應,更新ARP表;如果是請求,構造回應數據包
  288.                                 /*
  289.                                         當上面的函數執行后,如果需要發送數據,則全局變量 uip_len > 0
  290.                                         需要發送的數據在uip_buf, 長度是uip_len  (這是2個全局變量)
  291.                                 */
  292.                                 if (uip_len > 0)                //是ARP請求,要發送回應
  293.                                 {
  294.                                         tapdev_send();                //發ARP回應到以太網上
  295.                                 }
  296.                         }
  297.                 }
  298.           }
  299.           else{                           //防止大包造成接收死機,當沒有產生中斷,而ENC28J60中斷信號始終為低說明接收死機
  300.             if(ETH_rec_f==0) goto rep;        
  301.           }
  302. }
  303. /*******************************************************************************
  304. *        函數名:InitNet
  305. *        輸  入:
  306. *        輸  出:
  307. *        功能說明:初始化網絡硬件、UIP協議棧、配置本機IP地址
  308. ************************************************************/
  309. void InitNet(void)
  310. {
  311.         uip_ipaddr_t ipaddr;
  312.         tapdev_init();                                      //ENC28J60初始化
  313.        
  314.         USART_OUT(USART1,"uip_init\n\r");
  315.         uip_init();                                                                 //UIP協議棧初始化

  316.         USART_OUT(USART1,"uip ip address : 192,168,1,15\r\n");
  317.         uip_ipaddr(ipaddr, 192,168,1,15);                 //設置IP地址
  318.         uip_sethostaddr(ipaddr);

  319.         USART_OUT(USART1,"uip route address : 192,168,1,1\r\n");
  320.         uip_ipaddr(ipaddr, 192,168,1,1);                 //設置默認路由器IP地址
  321.         uip_setdraddr(ipaddr);

  322.         USART_OUT(USART1,"uip net mask : 255,255,255,0\r\n");
  323.         uip_ipaddr(ipaddr, 255,255,255,0);                 //設置網絡掩碼
  324.         uip_setnetmask(ipaddr);

  325. }
  326. /****************************************************************************
  327. * 名    稱:void GPIO_Configuration(void)
  328. * 功    能:通用IO口配置
  329. * 入口參數:無
  330. * 出口參數:無
  331. * 說    明:
  332. * 調用方法:
  333. ****************************************************************************/  
  334. void GPIO_Configuration(void)
  335. {
  336.   
  337.   GPIO_InitTypeDef GPIO_InitStructure;
  338.   RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 |RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
  339.                          RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
  340.                          RCC_APB2Periph_GPIOE, ENABLE);
  341.          
  342.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                                     //LED1控制
  343.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  344.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  345.   GPIO_Init(GPIOB, &GPIO_InitStructure);                                         

  346.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_3;                 //LED2, LED3控制
  347.   GPIO_Init(GPIOD, &GPIO_InitStructure);

  348.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                                         //SST25VF016B SPI片選
  349.   GPIO_Init(GPIOC, &GPIO_InitStructure);
  350.   
  351.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_7;                 //PB12---VS1003 SPI片選(V2.1)
  352.   GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //PB7---觸摸屏芯片XPT2046 SPI 片選
  353.   
  354.   /* 禁止SPI1總線上的其他設備 */
  355.   GPIO_SetBits(GPIOB, GPIO_Pin_7);                                                     //觸摸屏芯片XPT2046 SPI 片選禁止  
  356.   GPIO_SetBits(GPIOB, GPIO_Pin_12);                                                     //VS1003 SPI片選(V2.1)禁止
  357.   GPIO_SetBits(GPIOC, GPIO_Pin_4);                                                     //SST25VF016B SPI片選禁止  

  358.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                                  //ENC28J60接收完成中斷引腳
  359.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                            //內部上拉輸入
  360.   GPIO_Init(GPIOA, &GPIO_InitStructure);                 


  361. //  GPIO_ResetBits(GPIOE, GPIO_Pin_1);                                                 //復位ENC28J60
  362. //  Delay(0xAFFF);                                          
  363. //  GPIO_SetBits(GPIOE, GPIO_Pin_1 );                                               
  364. //  Delay(0xAFFF);       
  365. }


  366. void Delay(vu32 nCount) {
  367.   for(; nCount != 0; nCount--);
  368. }

  369. /****************************************************************************
  370. * 名    稱:void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...)
  371. * 功    能:格式化串口輸出函數
  372. * 入口參數:USARTx:  指定串口
  373.                         Data:   發送數組
  374.                         ...:     不定參數
  375. * 出口參數:無
  376. * 說    明:格式化串口輸出函數
  377.                 "\r"        回車符           USART_OUT(USART1, "abcdefg\r")   
  378.                         "\n"        換行符           USART_OUT(USART1, "abcdefg\r\n")
  379.                         "%s"        字符串           USART_OUT(USART1, "字符串是:%s","abcdefg")
  380.                         "%d"        十進制           USART_OUT(USART1, "a=%d",10)
  381. * 調用方法:無
  382. ****************************************************************************/
  383. void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...){
  384.         const char *s;
  385.     int d;
  386.     char buf[16];
  387.     va_list ap;
  388.     va_start(ap, Data);

  389.         while(*Data!=0){                                                          //判斷是否到達字符串結束符
  390.                 if(*Data==0x5c){                                                                          //'\'
  391.                         switch (*++Data){
  392.                                 case 'r':                                                                  //回車符
  393.                                         USART_SendData(USARTx, 0x0d);          

  394.                                         Data++;
  395.                                         break;
  396.                                 case 'n':                                                                  //換行符
  397.                                         USART_SendData(USARTx, 0x0a);       
  398.                                         Data++;
  399.                                         break;
  400.                                
  401.                                 default:
  402.                                         Data++;
  403.                                     break;
  404.                         }
  405.                        
  406.                          
  407.                 }
  408.                 else if(*Data=='%'){                                                                          //
  409.                         switch (*++Data){                               
  410.                                 case 's':                                                                                  //字符串
  411.                         s = va_arg(ap, const char *);
  412.                         for ( ; *s; s++) {
  413.                             USART_SendData(USARTx,*s);
  414.                                                 while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
  415.                         }
  416.                                         Data++;
  417.                         break;
  418.                     case 'd':                                                                                  //十進制
  419.                         d = va_arg(ap, int);
  420.                         itoa(d, buf, 10);
  421.                         for (s = buf; *s; s++) {
  422.                             USART_SendData(USARTx,*s);
  423.                                                 while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
  424.                         }
  425.                                         Data++;
  426.                         break;
  427.                                 default:
  428.                                         Data++;
  429.                                     break;
  430.                         }                 
  431.                 }
  432.                 else USART_SendData(USARTx, *Data++);
  433.                 while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
  434.         }
  435. }

  436. /******************************************************
  437.                 整形數據轉字符串函數
  438.         char *itoa(int value, char *string, int radix)
  439.                 radix=10 標示是10進制        非十進制,轉換結果為0;  
  440. ……………………

  441. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
STM32-奮斗板-uIP1.0網絡例程.rar (1.38 MB, 下載次數: 77)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:87631 發表于 2020-1-3 19:48 | 只看該作者
請問怎么設置在路由器中顯示的設備名稱
回復

使用道具 舉報

板凳
ID:254411 發表于 2020-3-28 15:06 | 只看該作者
文件不全咋用啊,大家不要下載
回復

使用道具 舉報

地板
ID:254411 發表于 2020-3-28 15:24 | 只看該作者
文件不全咋用啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久亚洲调教 | 免费成人在线网站 | 久久久在线视频 | 国产成人jvid在线播放 | 日韩欧美第一页 | 午夜影院在线观看免费 | 欧美乱大交xxxxx另类电影 | 欧美在线一区视频 | 成人免费毛片在线观看 | 成人深夜福利在线观看 | 亚洲欧美一区二区在线观看 | 国产一区二区在线免费视频 | 欧美性另类 | 国产精品久久a | 99亚洲精品 | 国产福利在线视频 | 亚洲精品综合一区二区 | 午夜精品一区二区三区在线视频 | 鸳鸯谱在线观看高清 | 网色 | 欧美日韩高清 | 欧美精品网 | 国产一级一级毛片 | 日韩精品一区二区三区四区视频 | 91久久国产综合久久91精品网站 | 涩涩片影院 | 亚洲男人天堂av | 国户精品久久久久久久久久久不卡 | 久久国产日韩 | 日韩成人免费视频 | 中文字幕av第一页 | 久久精片 | 人人人人人爽 | av黄色在线 | 欧美一区二区在线免费观看 | 久久久久久一区 | 人妖一区| 久久久久久亚洲精品 | 国产一级在线观看 | 国精久久| 日本超碰在线 |