找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 19922|回復(fù): 25
打印 上一主題 下一主題
收起左側(cè)

STM32用GPIO口模擬串口通信的源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:281787 發(fā)表于 2018-2-2 17:13 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
STM32 一般有4、5個(gè)串口,足夠使用,這個(gè)給想擴(kuò)一個(gè)串口的參考
/*
****************************************************************************
*    例程名稱      : Ex004-使用GPIO口模擬串口通信
*    例程版本      : V2.0
*    ST固件庫(kù)版本  :V3.5.0
*    作    者      : armfly
*    發(fā)布日期      : 10-16
*    開發(fā)環(huán)境      : KEIL的uVision V3.70、uVision V4.13、IAR的EWARM V5.30
*
*    修改記錄      :
*        2010-09-27 發(fā)布V1.0版本,固件庫(kù)為V3.1.2
*        2011-03-20 發(fā)布V1.1版本,固件庫(kù)為V3.4.0
*        2011-11-16 發(fā)布2.0版本,固件庫(kù)為V3.5.0,優(yōu)化工程結(jié)構(gòu),打印信息改為中文
*
*********************************************************************************************************
*/

【1】例程介紹        
    這個(gè)例子演示如何使用兩個(gè)GPIO口模擬串口通信,波特率9600,8位數(shù)據(jù)位,1位停止位。


    IO口的選擇:
    (1)為方便連接至PC的串口,仍選用PA9與PA10,不過這里只將它們當(dāng)作變通的IO口使用。PA9對(duì)應(yīng)TXD,PA10對(duì)應(yīng)RXD的功能。

    模擬串口發(fā)送:
    (1)TIM3用于產(chǎn)生1bit[104uS]的延時(shí)

    模擬串口接收:
    (1)PA10上的下降沿將觸發(fā)外部中斷,這標(biāo)志著“起始位0”的到來。在對(duì)應(yīng)的中斷服務(wù)程序中,會(huì)立即關(guān)閉該外部中斷,以
         防后續(xù)的“數(shù)據(jù)位”誤觸發(fā)本中斷。
    (2)TIM1用于產(chǎn)生104uS的中斷,定時(shí)去讀取PA10上的電平,直至接收到一個(gè)完整的字節(jié)數(shù)據(jù)。
    (3)在接收到一個(gè)完整的字節(jié)數(shù)據(jù)之后,開啟TIM2,它的作用是判斷是否接收到了全部的數(shù)據(jù)。   

   
        
    請(qǐng)用串口線將開發(fā)板的COM1口連接到PC機(jī)的串口(或者USB串口),然后打開串口調(diào)試助手(推薦使用作者為聶小猛的那款,它
         可以顯示返回至PC的中文字符),可以在軟件界面看到例程的運(yùn)行信息。
   
    程序具有如下功能:
        - 復(fù)位后打印例程基本信息
        - 在接收完P(guān)C發(fā)送下去的數(shù)據(jù)后,將它們?nèi)糠祷亍?br />
    程序執(zhí)行結(jié)果如下:
        Hello,C!
        *************************************************************
        * 例程名稱   : GPIO口模擬串口
        * 例程版本   : 1.0
        * 發(fā)布日期   : 11-12
        * 固件庫(kù)版本 : 3.5.0
        *************************************************************
        請(qǐng)通過串口調(diào)試助手發(fā)送數(shù)據(jù),本例程會(huì)將這些數(shù)據(jù)通過串口原樣返回。

    對(duì)于Keil MDK,為了避免中文字符串告警,需要在C/C++編譯選項(xiàng)中增加 --diag_suppress=870 參數(shù)。   

    本程序支持在CPU內(nèi)部Flash、CPU內(nèi)部RAM和CPU外部RAM調(diào)試。在CPU內(nèi)部RAM和CPU外部SRAM調(diào)試時(shí),無需切換開發(fā)板上的
    啟動(dòng)模式撥碼開關(guān)。請(qǐng)將撥碼開關(guān)撥到Flash位置。
            
【2】例程文件夾說明
├─Libraries :  存放第3方提供的庫(kù)或其源代碼,這些代碼一般是成熟的并經(jīng)過驗(yàn)證的代碼。
│  ├─CMSIS  :  Cortex微控制器軟件接口程序,這是ST官方提供的固件庫(kù)的一部分。
│  └─STM32F10x_StdPeriph_Driver : STM32F10x系列MCU的固件庫(kù)源代碼,這是ST官方提供的固件庫(kù)的核心代碼。

├─User      :  這里存放用戶自己編寫的源代碼
│  └─bsp   :  板級(jí)支持包(Board Surport Packet),也就是硬件底層驅(qū)動(dòng)程序

└─project   :  這里存放各類開發(fā)工具的工程文件
   ├─EWARMv5      : IAR公司EWARM工程文件
   ├─MDK-ARM(uV3) :KEIL的MDK工程文件,uVision3版本。uV3不能打開uV4版本的工程。
   └─MDK-ARM(uV4) : KEIL的MDK工程文件,uVision4版本。uV4可以打開uV3版本的工程。

【3】工程中源代碼分組說明
└─Flash               : Target名稱:Flash、CpuRAM 或 ExtSRAM
   ├─USER             : 用戶程序
   ├─MDK-ARM          : 和IDE開發(fā)工具相關(guān)的啟動(dòng)代碼(匯編)。MDK表示KEIL的IDE,EWARMv5表示IAR的IDE
   ├─StdPeriph_Driver : STM32F10x系列MCU的固件庫(kù)源代碼
   ├─CMSIS            : Cortex微控制器軟件接口程序源代碼
   └─Doc              : 存放一些文檔

【4】工程中Target說明
    Flash   : 目標(biāo)代碼定位在CPU內(nèi)部Flash。ROM地址: 0x08000000 RAM地址: 0x20000000
    CpuRAM  : 目標(biāo)代碼定位在CPU內(nèi)部RAM。  ROM地址: 0x20000000 RAM地址: 0x20008000
    ExtSRAM : 目標(biāo)代碼定位在外部SRAM。    ROM地址: 0x68000000 RAM地址: 0x20000200 (前面0x200空間存放
            中斷向量表)
  1. /*
  2. *********************************************************************************************************
  3. *                                          
  4. *        模塊名稱 : 主程序模塊。
  5. *        文件名稱 : main.c
  6. *        版    本 : V1.0
  7. *        說    明 : ADC采樣和濾波例程。
  8. *        修改記錄 :
  9. *                版本號(hào)  日期       作者    說明
  10. *
  11. *********************************************************************************************************
  12. */

  13. #include "stm32f10x.h"                /* 如果要用ST的固件庫(kù),必須包含這個(gè)文件 */
  14. #include <stdio.h>                        /* 因?yàn)橛玫搅藀rintf函數(shù),所以必須包含這個(gè)文件 */

  15. /* 定義例程名和例程發(fā)布日期 */                                       
  16. #define EXAMPLE_NAME        "GPIO口模擬串口"
  17. #define EXAMPLE_DATE        "2012-11-12"
  18. #define DEMO_VER                "1.0"

  19. #define TXD_high()                GPIO_SetBits(GPIOA, GPIO_Pin_9)
  20. #define TXD_low()                GPIO_ResetBits(GPIOA, GPIO_Pin_9)

  21. #define BaudRateUsed        9600

  22. #define SendingDelay        104

  23. /* 僅允許本文件內(nèi)調(diào)用的函數(shù)聲明 */
  24. static void PrintfLogo(void);
  25. static void GPIO_Configuration(void);
  26. static void Delay_Ms(__IO uint32_t nTime);
  27. static void EXTI_Configuration(void);
  28. static void TIM1_Configuration(void);
  29. static void TIM2_Configuration(void);
  30. static void TIM3_Configuration(void);
  31. static void PrintfAnswer(void);

  32. /* 外部文件可以調(diào)用的函數(shù)聲明 */
  33. void SendOneByte(uint8_t datatoSend);

  34. __IO uint32_t TimingDelay;
  35. uint8_t dataReceived[100];
  36. uint8_t Logo[]={"Hello, C!\r\n"};
  37. __IO uint8_t receivedFlag;
  38. __IO uint8_t receivedNum, tmpreceivedNum;



  39. uint16_t g_usAdcValue;        /* ADC 采樣值的平均值 */

  40. /*
  41. *********************************************************************************************************
  42. *        函 數(shù) 名: main
  43. *        功能說明: c程序入口
  44. *        形    參:無
  45. *        返 回 值: 錯(cuò)誤代碼(無需處理)
  46. *********************************************************************************************************
  47. */
  48. int main(void)
  49. {
  50.         /*
  51.                 由于ST固件庫(kù)的啟動(dòng)文件已經(jīng)執(zhí)行了CPU系統(tǒng)時(shí)鐘的初始化,所以不必再次重復(fù)配置系統(tǒng)時(shí)鐘。
  52.                 啟動(dòng)文件配置了CPU主時(shí)鐘頻率、內(nèi)部Flash訪問速度和可選的外部SRAM FSMC初始化。
  53.                
  54.                 系統(tǒng)時(shí)鐘缺省配置為72MHz,如果需要更改,可以修改:
  55.                 \Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
  56.                 中配置系統(tǒng)時(shí)鐘的宏。
  57.         */

  58.         uint8_t i;

  59.         /* IO配置 */
  60.         GPIO_Configuration();

  61.         /* 配置外部中斷 */
  62.         EXTI_Configuration();

  63.         /* TIM1初始化,用于接收 */
  64.         TIM1_Configuration();

  65.         /* TIM2初始化,用于判斷數(shù)據(jù)是否接收完成 */
  66.         TIM2_Configuration();

  67.         /* TIM3初始化,用于發(fā)送 */
  68.         TIM3_Configuration();


  69.         /* 直接調(diào)用模擬串口發(fā)送函數(shù) */
  70.         SendOneByte('H');       
  71.         SendOneByte('e');
  72.         SendOneByte('l');
  73.         SendOneByte('l');
  74.         SendOneByte('o');
  75.         SendOneByte(',');
  76.         SendOneByte('C');
  77.         SendOneByte('!');
  78.         SendOneByte('\r');
  79.         SendOneByte('\n');

  80.         /* 打印例程Logo,間接調(diào)用模擬串口發(fā)送函數(shù) */
  81.         PrintfLogo();       
  82.        

  83.         /* 進(jìn)入主程序循環(huán)體 */
  84.         while (1)
  85.         {

  86.                 if(receivedFlag)
  87.                 {
  88.                         /* 清除接收完成標(biāo)志位 */
  89.                         receivedFlag = 0;

  90.                         /* 返回接收到的數(shù)據(jù) */
  91.                         for(i = 0; i < tmpreceivedNum; i++)
  92.                                 SendOneByte(dataReceived[i]);

  93.                         /* 清空接收緩存 */
  94.                         for(i = 0; i < tmpreceivedNum; i++)
  95.                                 dataReceived[i] = 0;

  96.                         /* 返回模擬對(duì)話數(shù)據(jù) */
  97.                         PrintfAnswer();

  98.                         /* 接收數(shù)據(jù)長(zhǎng)度清零 */
  99.                         tmpreceivedNum = 0;
  100.                 }

  101.         }
  102. }

  103. /*
  104. *********************************************************************************************************
  105. *        函 數(shù) 名: GPIO_Configuration
  106. *        功能說明: 配置PA9為TXD,PA10做RXD
  107. *        形    參:無
  108. *        返 回 值: 無
  109. *********************************************************************************************************
  110. */
  111. static void GPIO_Configuration(void)
  112. {
  113.         GPIO_InitTypeDef GPIO_InitStructure;

  114.     /* 使能 GPIOA clock */
  115.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);

  116.         /* 防止上電后的誤判 */
  117.         GPIO_SetBits(GPIOA, GPIO_Pin_9);

  118.         /* 配置PA9為推挽輸出 */
  119.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  120.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  121.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  122.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  123.         /* 配置PA10為浮空輸入 */
  124.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  125.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  126.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  127.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  128. }

  129. /*
  130. *********************************************************************************************************
  131. *        函 數(shù) 名: EXTI_Configuration
  132. *        功能說明: 配置PA10上的下降沿觸發(fā)外部中斷
  133. *        形    參:無
  134. *        返 回 值: 無
  135. *********************************************************************************************************
  136. */
  137. static void EXTI_Configuration(void)
  138. {
  139.           EXTI_InitTypeDef EXTI_InitStructure;
  140.           NVIC_InitTypeDef NVIC_InitStructure;

  141.         /* Enable the AFIO Clock */
  142.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

  143.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);

  144.     /* Configure Button EXTI line */
  145.     EXTI_InitStructure.EXTI_Line = EXTI_Line10;
  146.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  147.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  

  148.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  149.     EXTI_Init(&EXTI_InitStructure);

  150.     /* Enable and set Button EXTI Interrupt to the lowest priority */
  151.     NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
  152.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
  153.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
  154.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  155.     NVIC_Init(&NVIC_InitStructure);
  156. }

  157. /*
  158. *********************************************************************************************************
  159. *        函 數(shù) 名: TIM1_Configuration
  160. *        功能說明: 配置TIM1
  161. *        形    參:無
  162. *        返 回 值: 無
  163. *********************************************************************************************************
  164. */
  165. static void TIM1_Configuration(void)
  166. {
  167.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  168.         NVIC_InitTypeDef NVIC_InitStructure;

  169.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

  170.           /* Time base configuration */
  171.           TIM_TimeBaseStructure.TIM_Period = SendingDelay -1;
  172.           TIM_TimeBaseStructure.TIM_Prescaler = 72-1;
  173.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  174.           TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  175.           TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);


  176.         TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update);
  177.        
  178.         /* 開啟TIM1的中斷 */
  179.     TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);     
  180.         

  181.     /* 選擇TIM2的中斷通道 */
  182.     NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;      
  183.    
  184.         /* 搶占式中斷優(yōu)先級(jí)設(shè)置為0 */
  185.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  186.    
  187.         /* 響應(yīng)式中斷優(yōu)先級(jí)設(shè)置為0 */
  188.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  189.    
  190.         /* 使能中斷 */
  191.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  192.     NVIC_Init(&NVIC_InitStructure);
  193. }


  194. /*
  195. *********************************************************************************************************
  196. *        函 數(shù) 名: TIM2_Configuration
  197. *        功能說明: 配置TIM1
  198. *        形    參:無
  199. *        返 回 值: 無
  200. *********************************************************************************************************
  201. */
  202. static void TIM2_Configuration(void)
  203. {
  204.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  205.         NVIC_InitTypeDef NVIC_InitStructure;

  206.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

  207.           /* Time base configuration */
  208.           TIM_TimeBaseStructure.TIM_Period = 1000 - 1;
  209.           TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;
  210.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  211.           TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  212.           TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  213.         TIM_ClearITPendingBit(TIM2, TIM_FLAG_Update);
  214.        
  215.         /* 開啟TIM1的中斷 */
  216.     TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);      
  217.         
  218.     /* 選擇TIM2的中斷通道 */
  219.     NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;      
  220.    
  221.         /* 搶占式中斷優(yōu)先級(jí)設(shè)置為0 */
  222.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  223.    
  224.         /* 響應(yīng)式中斷優(yōu)先級(jí)設(shè)置為0 */
  225.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  226.    
  227.         /* 使能中斷 */
  228.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  229.     NVIC_Init(&NVIC_InitStructure);
  230. }

  231. /*
  232. *********************************************************************************************************
  233. *        函 數(shù) 名: TIM3_Configuration
  234. *        功能說明: 配置TIM1
  235. *        形    參:無
  236. *        返 回 值: 無
  237. *********************************************************************************************************
  238. */
  239. static void TIM3_Configuration(void)
  240. {
  241.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  242.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

  243.           /* Time base configuration */
  244.           TIM_TimeBaseStructure.TIM_Period = 65535 - 1;
  245.           TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;
  246.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  247.           TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  248.           TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  249.         TIM_Cmd(TIM3,ENABLE);   

  250. }

  251. /*
  252. *********************************************************************************************************
  253. *        函 數(shù) 名: Delay_Ms
  254. *        功能說明: 延時(shí)
  255. *        形    參:nTime,單位為uS
  256. *        返 回 值: 無
  257. *********************************************************************************************************
  258. */
  259. void Delay_Ms(__IO uint32_t nTime)
  260. {

  261.         uint16_t tmp;

  262.         tmp = TIM_GetCounter(TIM3);
  263.        
  264.         if(tmp + nTime <= 65535)
  265.                 while( (TIM_GetCounter(TIM3) - tmp) < nTime );
  266.         else
  267.         {
  268.                 TIM_SetCounter(TIM3, 0);
  269.                 while( TIM_GetCounter(TIM3) < nTime );
  270.         }
  271.                        
  272. }

  273. /*
  274. *********************************************************************************************************
  275. *        函 數(shù) 名: SendOneByte
  276. *        功能說明: 模擬串口發(fā)送一字節(jié)數(shù)據(jù)
  277. *        形    參:無
  278. *        返 回 值: 無
  279. *********************************************************************************************************
  280. */
  281. void SendOneByte(uint8_t datatoSend)
  282. {
  283.         uint8_t i, tmp;

  284.         /* Start bit */
  285.         TXD_low();
  286.         Delay_Ms(SendingDelay);       

  287.         for(i = 0; i < 8; i++)
  288.         {
  289.                 tmp        = (datatoSend >> i) & 0x01;

  290.                 if(tmp == 0)
  291.                 {
  292.                         TXD_low();
  293.                         Delay_Ms(SendingDelay);        //0               
  294.                 }
  295.                 else
  296.                 {
  297.                         TXD_high();
  298.                         Delay_Ms(SendingDelay);        //1               
  299.                 }       
  300.         }
  301.        
  302.         /* Stop bit */
  303.         TXD_high();
  304.         Delay_Ms(SendingDelay);       
  305. }

  306. /*
  307. *********************************************************************************************************
  308. *        函 數(shù) 名: PrintfLogo
  309. *        功能說明: 打印例程名稱和例程發(fā)布日期, 接上串口線后,打開PC機(jī)的超級(jí)終端軟件可以觀察結(jié)果
  310. *        形    參:無
  311. *        返 回 值: 無
  312. *********************************************************************************************************
  313. */
  314. static void PrintfLogo(void)
  315. {
  316.         printf("*************************************************************\r\n");
  317.         printf("* 例程名稱   : %s\r\n", EXAMPLE_NAME);        /* 打印例程名稱 */
  318.         printf("* 例程版本   : %s\r\n", DEMO_VER);                /* 打印例程版本 */
  319.         printf("* 發(fā)布日期   : %s\r\n", EXAMPLE_DATE);        /* 打印例程日期 */

  320.         /* 打印ST固件庫(kù)版本,這3個(gè)定義宏在stm32f10x.h文件中 */
  321.         printf("* 固件庫(kù)版本 : %d.%d.%d\r\n", __STM32F10X_STDPERIPH_VERSION_MAIN,
  322.                         __STM32F10X_STDPERIPH_VERSION_SUB1,__STM32F10X_STDPERIPH_VERSION_SUB2);               
  323.         printf("* \n\r");        /* 打印一行空格 */
  324.         printf("* QQ    : 1295744630 \r\n");
  325.         printf("* Email : armfly@qq.com \r\n");
  326.         printf("* Copyright www.armfly.com 安富萊電子\r\n");
  327.         printf("*************************************************************\r\n");
  328.         printf("請(qǐng)通過串口調(diào)試助手發(fā)送數(shù)據(jù),本例程會(huì)將這些數(shù)據(jù)通過串口原樣返回。\r\n\r\n");
  329. }

  330. /*
  331. *********************************************************************************************************
  332. *        函 數(shù) 名: PrintfLogo
  333. *        功能說明: 隨機(jī)打印模擬對(duì)話
  334. *        形    參:無
  335. *        返 回 值: 無
  336. *********************************************************************************************************
  337. */
  338. static void PrintfAnswer(void)
  339. {
  340.         uint16_t tmp;

  341.         tmp = TIM_GetCounter(TIM3);

  342.         switch(tmp % 9)
  343.         {
  344.                 case 0:
  345.                         printf("\r\n--雷工,數(shù)據(jù)已悉數(shù)返回,掰掰手指頭,有未丟?\r\n");
  346.                         break;

  347.                 case 1:
  348.                         printf("\r\n--報(bào)告雷工,我的工作完了,輪到你檢查了!\r\n");
  349.                         break;

  350.                 case 2:
  351.                         printf("\r\n--咦,還沒有錯(cuò)?\r\n");
  352.                         break;

  353.                 case 3:
  354.                         printf("\r\n--靠,還不出錯(cuò)?\r\n");
  355.                         break;

  356.                 case 4:
  357.                         printf("\r\n--雷工,要不,再試試?\r\n");
  358.                         break;

  359.                 case 5:
  360.                         printf("\r\n--小雷,檢查過沒有,數(shù)據(jù)對(duì)不對(duì)?\r\n");
  361.                         break;

  362.                 case 6:
  363.                         printf("\r\n--小雷,數(shù)據(jù)對(duì)不對(duì)?\r\n");
  364.                         break;

  365.                 case 7:
  366.                         printf("\r\n--怎么樣,小雷,驗(yàn)收通過了沒?\r\n");
  367.                         break;

  368.                 case 8:
  369.                         printf("\r\n--小雷,我的支付寶是168 168 168 168\r\n");
  370.                         break;

  371.                 default:
  372.                         printf("\r\n--這句不可能出現(xiàn)在屏幕上\r\n");
  373.                         break;
  374.         }
  375. }
復(fù)制代碼
源碼下載:
STM模擬串口.7z (489.86 KB, 下載次數(shù): 319)


評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
liuyanga + 5 贊一個(gè)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:283302 發(fā)表于 2018-2-9 13:23 | 只看該作者
學(xué)習(xí)一下。。。
回復(fù)

使用道具 舉報(bào)

板凳
ID:301892 發(fā)表于 2018-4-22 21:46 | 只看該作者
很有用
回復(fù)

使用道具 舉報(bào)

地板
ID:360883 發(fā)表于 2018-6-28 11:01 | 只看該作者
正需要,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

5#
ID:360883 發(fā)表于 2018-6-28 11:25 | 只看該作者
學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

6#
ID:365115 發(fā)表于 2018-7-4 19:49 | 只看該作者
最近在研究stm,這個(gè)看著很有用,謝謝。
回復(fù)

使用道具 舉報(bào)

7#
ID:374080 發(fā)表于 2018-7-18 14:55 | 只看該作者
有毫秒級(jí)的延時(shí)讓單片機(jī)一直在等,不處理任何其它的事情,效率不高,無法用在產(chǎn)品中,玩玩還可以
回復(fù)

使用道具 舉報(bào)

8#
ID:247307 發(fā)表于 2018-12-3 10:25 | 只看該作者
學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

9#
ID:438289 發(fā)表于 2018-12-3 15:49 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

10#
ID:433680 發(fā)表于 2018-12-10 20:17 | 只看該作者
效率不高!但感謝樓主分享
回復(fù)

使用道具 舉報(bào)

11#
ID:488243 發(fā)表于 2019-3-10 23:28 | 只看該作者
感謝提供參考
回復(fù)

使用道具 舉報(bào)

12#
ID:489002 發(fā)表于 2019-3-12 09:03 | 只看該作者
贊一個(gè)
回復(fù)

使用道具 舉報(bào)

13#
ID:48797 發(fā)表于 2019-3-29 09:14 | 只看該作者
最近在研究這個(gè),學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

14#
ID:87560 發(fā)表于 2019-5-7 22:01 | 只看該作者
謝謝分享,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

15#
ID:530048 發(fā)表于 2019-5-15 17:26 | 只看該作者
有沒有大神能講講TIM3和延時(shí)函數(shù)那Delay 太懂 Delay函數(shù)里面的 if 。。。while。。。到底怎么形成1us的延時(shí) 然后Delay(104)
回復(fù)

使用道具 舉報(bào)

16#
ID:525821 發(fā)表于 2019-5-23 20:44 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

17#
ID:389977 發(fā)表于 2019-7-26 17:01 | 只看該作者
不錯(cuò),蠻好的,支持樓主
回復(fù)

使用道具 舉報(bào)

18#
ID:595480 發(fā)表于 2019-8-5 13:26 | 只看該作者
多謝分享
回復(fù)

使用道具 舉報(bào)

19#
ID:595719 發(fā)表于 2019-8-5 17:48 | 只看該作者
正需要,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

20#
ID:262504 發(fā)表于 2019-9-2 15:09 | 只看該作者
感謝
回復(fù)

使用道具 舉報(bào)

21#
ID:69590 發(fā)表于 2019-10-31 20:03 | 只看該作者
最近項(xiàng)目需要,正好研究下
回復(fù)

使用道具 舉報(bào)

22#
ID:646577 發(fā)表于 2019-11-21 17:08 | 只看該作者
可以。能用,易懂
回復(fù)

使用道具 舉報(bào)

23#
ID:255256 發(fā)表于 2019-12-18 14:00 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

24#
ID:549293 發(fā)表于 2020-3-9 09:38 | 只看該作者
這個(gè)代碼風(fēng)格 太舒服
回復(fù)

使用道具 舉報(bào)

25#
ID:40911 發(fā)表于 2020-3-20 11:46 | 只看該作者
謝謝樓主
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表