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

標題: STM8L151串口通信程序 [打印本頁]

作者: xbbb1    時間: 2019-2-20 10:36
標題: STM8L151串口通信程序

最近學習開發STM8 MCU,,剛入手這顆MCU,對很多功能不太了解,只能一邊開發一邊學習,記錄一下學習過程,如有錯誤的地方,敬請指正。

MCU:STM8L151K4
環境:IAR FOR STM8


  1. #include "uart.h"
  2. #include <stdarg.h>
  3. #include <string.h>


  4. void UARTInit(void)
  5. {

  6.    
  7.     GPIO_Init(GPIOC, GPIO_Pin_3, GPIO_Mode_Out_PP_High_Fast);//TXD
  8.     GPIO_Init(GPIOC, GPIO_Pin_2, GPIO_Mode_In_PU_No_IT);//RXD
  9.         CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);
  10.     USART_DeInit(USART1);       //復位UART1

  11.         USART_Init(USART1, (u32)115200, USART_WordLength_8b, USART_StopBits_1, USART_Parity_No, USART_Mode_Rx|USART_Mode_Tx);
  12.         USART_ClearITPendingBit(USART1, USART_IT_RXNE);
  13.         USART_ITConfig( USART1,  USART_IT_RXNE, ENABLE ); //開啟接收中斷
  14. //        USART_ITConfig( USART1,  USART_IT_TC, DISABLE ); //關閉傳輸完成中斷
  15.         USART_Cmd(USART1, ENABLE );
  16.                
  17. }

  18. /*
  19. * 函數介紹: 發送一個字節
  20. * 輸入參數: 需要發送的數據
  21. * 返回值:   無
  22. */
  23. void UARTSendData(u8 data){
  24.   
  25.         USART_SendData8(USART1, data);
  26.          /* 等待傳輸結束 */
  27.     while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
  28. }


  29. void UARTSendBuf(u8* Data, u16 len){
  30.         u16 i = 0;
  31.         for(; i<len ;i++)
  32.                 UARTSendData(Data[i]);
  33. }

  34. /*
  35. * 函數介紹: 發送任意字符串
  36. * 輸入參數: 變參
  37. * 返回值:   無
  38. */
  39. void UARTSendString(char *format, ...)
  40. {
  41.         char strBuf[64];
  42.         va_list ap;   //初始化指向可變參數列表的指針  
  43.         va_start(ap, format);  //將第一個可變參數的地址賦給ap,即ap指向可變參數列表的開始
  44.         vsprintf(strBuf, format, ap); //將參數ap和format進行轉化形成格式化字符串,即可以顯示的字符串
  45.         strBuf[63] = 0;
  46.         UARTSendBuf(strBuf, strlen(strBuf));
  47.         va_end(ap);
  48. }


  49. /*
  50. * 函數介紹: 接收一個字節
  51. * 輸入參數: 無
  52. * 返回值:   USART1_RX_BUF,接收的數據
  53. */
  54. u8 UARTReceiveByte(void)
  55. {
  56.   
  57.      u8 USART1_RX_BUF;
  58.          
  59.       /* 等待接收完成 */
  60.     while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
  61.         
  62.          USART1_RX_BUF = USART_ReceiveData8(USART1);
  63.          
  64.          return  USART1_RX_BUF;
  65.    
  66. }

  67. /*
  68. * 函數名:itoa
  69. * 描述  :將整形數據轉換成字符串
  70. * 輸入  :-radix =10 表示10進制,其他結果為0
  71. *         -value 要轉換的整形數
  72. *         -buf 轉換后的字符串
  73. *         -radix = 10
  74. * 輸出  :無
  75. * 返回  :無
  76. * 調用  :被USART1_printf()調用
  77. */
  78. static char *itoa(int value, char *string, int radix)
  79. {
  80.     int     i, d;
  81.     int     flag = 0;
  82.     char    *ptr = string;

  83.     /* This implementation only works for decimal numbers. */
  84.     if (radix != 10)
  85.     {
  86.         *ptr = 0;
  87.         return string;
  88.     }

  89.     if (!value)
  90.     {
  91.         *ptr++ = 0x30;
  92.         *ptr = 0;
  93.         return string;
  94.     }

  95.     /* if this is a negative value insert the minus sign. */
  96.     if (value < 0)
  97.     {
  98.         *ptr++ = '-';
  99.         /* Make the value positive. */
  100.         value *= -1;
  101.     }

  102.     for (i = 10000; i > 0; i /= 10)
  103.     {
  104.         d = value / i;

  105.         if (d || flag)
  106.         {
  107.             *ptr++ = (char)(d + 0x30);
  108.             value -= (d * i);
  109.             flag = 1;
  110.         }
  111.     }

  112.     /* Null terminate the string. */
  113.     *ptr = 0;

  114.     return string;

  115. } /* NCL_Itoa */


  116. /*
  117. * 函數名:UART1_printf
  118. * 描述  :格式化輸出,類似于C庫中的printf,但這里沒有用到C庫
  119. * 輸入  :-UARTx 串口通道,這里只用到了串口1,即UART1
  120. *           -Data   要發送到串口的內容的指針
  121. *             -...    其他參數
  122. * 輸出  :無
  123. * 返回  :無
  124. * 調用  :外部調用
  125. *         典型應用  UART1_printf( \"\r\n this is a demo \r\n\" );
  126. *                   UART1_printf(  \"\r\n %d \r\n\", i );
  127. *                   UART1_printf(  \"\r\n %s \r\n\", j );
  128. */
  129. void UART1Printf(u8 *Data , ...)
  130. {
  131.     const char *s;
  132.     int d;   
  133.     char buf[16];
  134.     va_list ap;
  135.     va_start(ap, Data);
  136.      
  137.     while ( *Data != 0)     // 判斷是否到達字符串結束符
  138.     {                                         
  139.         if ( *Data == 0x5c )  //'\'
  140.         {                                    
  141.             switch ( *++Data )
  142.             {
  143.                 case 'r':                                     //回車符
  144.                     USART_SendData8(USART1, 0x0d);
  145.                     Data ++;
  146.                 break;
  147.      
  148.                 case 'n':                                     //換行符
  149.                     USART_SendData8(USART1, 0x0a);  
  150.                     Data ++;
  151.                 break;
  152.      
  153.                 default:
  154.                     Data ++;
  155.                 break;
  156.             }            
  157.         }
  158.         else if ( *Data == '%')
  159.         {                   //
  160.             switch ( *++Data )
  161.             {               
  162.                 case 's':                       //字符串
  163.                 s = va_arg(ap, const char *);
  164.                 for ( ; *s; s++)
  165.                 {
  166.                     USART_SendData8(USART1, *s);
  167.                     while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
  168.                 }
  169.                 Data++;
  170.                 break;  
  171.                 case 'd':   //十進制
  172.                     d = va_arg(ap, int);
  173.                     itoa(d, buf, 10);
  174.                 for (s = buf; *s; s++)
  175.                 {
  176.                     USART_SendData8(USART1, *s);
  177.                     while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
  178.                 }
  179.                 Data++;
  180.                 break;         
  181.                 default: Data++;
  182.                 break;
  183.             }        
  184.         } /* end of else if */
  185.         else USART_SendData8(USART1, *Data++);
  186.         while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
  187.          }
  188. }

復制代碼
全部資料51hei下載地址:
USBDongle-Lock.7z (1.24 MB, 下載次數: 104)


作者: ontheroad    時間: 2019-3-12 13:58
STM8L151串口通信程序,非常實用。串口通訊,確實少不了。
作者: NetFireQiu    時間: 2019-5-13 20:21
STM8L151串口通信程序,非常實用。串口通訊,確實少不了,Niex
作者: Mayday8888    時間: 2019-9-16 16:52
好資料,下載學習
作者: gy51xx    時間: 2019-12-22 16:56
您好,這個壓縮包損壞了





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 超碰97人人人人人蜜桃 | 中国av在线免费观看 | 精品久久久久久亚洲精品 | 国产黄色大片 | 欧美一区二区三区在线播放 | 久久99国产精品久久99果冻传媒 | 美女久久久久久久久 | 久久久不卡网国产精品一区 | av黄在线观看 | 国产精品久久久久久久久久软件 | 日韩中文字幕一区二区 | www国产精品 | 91精品国产综合久久精品 | 中国一级大毛片 | 日韩精品久久 | 成人高潮片免费视频欧美 | 国产精品日韩欧美一区二区 | 国产精品美女久久久久aⅴ国产馆 | 亚洲国产精品久久久 | 日本不卡在线视频 | 久久国产精品91 | 国产1区2区3区 | 天天射影院 | 精品久| 欧美日韩国产高清 | 三级免费毛片 | 日韩三级免费观看 | 国产小视频在线 | 一区二区在线不卡 | 国产在线一区二区三区 | www.日韩| 欧美日韩三级 | 黄色大片免费观看 | 男女免费视频网站 | 成人国产精品免费观看 | 精品久久久网站 | 欧美一区不卡 | 国产人成精品一区二区三 | 91资源在线 | 日韩在线视频精品 | 国产片侵犯亲女视频播放 |