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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM8L151串口通信程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:478387 發表于 2019-2-20 10:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

最近學習開發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)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:445069 發表于 2019-3-12 13:58 | 只看該作者
STM8L151串口通信程序,非常實用。串口通訊,確實少不了。
回復

使用道具 舉報

板凳
ID:537357 發表于 2019-5-13 20:21 | 只看該作者
STM8L151串口通信程序,非常實用。串口通訊,確實少不了,Niex
回復

使用道具 舉報

地板
ID:495929 發表于 2019-9-16 16:52 | 只看該作者
好資料,下載學習
回復

使用道具 舉報

5#
ID:228755 發表于 2019-12-22 16:56 | 只看該作者
您好,這個壓縮包損壞了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 青青久在线视频 | 欧美精品福利 | 午夜精品一区二区三区免费视频 | 国产乱xxav| 亚洲精品一区二区三区丝袜 | 一区在线播放 | 国产成人黄色 | 国产成人精品一区二区三区视频 | 亚洲a视频 | 亚洲第一天堂 | 希岛爱理在线 | 日韩欧美在线一区 | 91在线视频一区 | 福利视频二区 | 曰批视频在线观看 | 日美女逼逼 | 日批免费看 | 亚洲精品在线看 | 人人艹人人爽 | 偷拍亚洲色图 | 黄色成人在线观看 | 99精品欧美| 男人天堂av网 | 日韩精品一区二区三区久久 | 亚洲精品久久久久久一区二区 | 在线视频一区二区 | 国产成人综合久久 | 99资源| 国产女人与拘做受免费视频 | 色婷婷一区二区三区四区 | 日本超碰 | 亚洲三级在线观看 | 夜夜操av| 日韩欧美一级精品久久 | 日韩欧美一区二区在线播放 | h网站在线观看 | 毛片毛片毛片毛片毛片 | 欧美日韩亚洲一区 | 成人亚洲网 | 国产激情一区二区三区 | 欧美午夜一区 |