论坛风格切换切换到宽版
发帖 回复
返回列表  提醒:不能用迅雷等P2P下载,否则下载失败标(二级)的板块,需二级才能下载,没二级不要购买,下载不了
  • 769阅读
  • 2回复

stm8s 串口使用例程代码 [复制链接]

上一主题 下一主题
离线deepken
 

性别:
帅哥
发帖
5
金币
6
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看楼主 倒序阅读 使用道具 0楼 发表于: 2016-11-13
L~WC9xguDl  
stm8s 串口使用例程代码 I6jDRC0<  
myR}~Cj;q  
8 2EH'C  
* 文件名  :uart.c q1|! oQ  
* 描述    :串口通信配置函数库     /C'dW  
* 实验平台:iCreate STM8开发板 `egyk)"aM  
* 库版本  :V2.0.0 &s+F+8"P+  
* 作者    :ling_guansheng  QQ:779814207 l$>))cW!  
* 博客    : p+t79F.js  
*修改时间 :2011-12-20 f|U J%}$v;  
  iCreate STM8开发板硬件连接 v>4kF _N  
    |--------------------| $bGe1\  
    |  USART1_RX-PA4     | 5S;|U&f|  
    |  USART1_TX-PA5     | )\!-n]+A  
    |--------------------| 5D~>Ed;  
SWrt4G  
****************************************************************************************/ qv+8wJ((  
U1.w%b,  
#include "uart.h" IK /@j  
#include "stm8s.h" TB8a#bK4  
#include "stm8s_clk.h" k~ YZT 8  
#include <stdarg.h> jn+M L&  
/* ******************************************** _YT9zG  
UART2  configured as follow: NIzxSGk|  
  - BaudRate = 115200 baud   N9[2k.oBH  
  - Word Length = 8 Bits tW=,o&C=  
  - One Stop Bit KBb{Z;%  
  - No parity F1q a`j^'  
  - Receive and transmit enabled cP]5Qz   
-  Receive interrupt Me.t_)  
  - UART2 Clock disabled p5`d@y\hj  
*********************************************/ 0Xke26ga  
void Uart_Init(void) LK?V`J5wY  
{ -9L [eYn  
    //恢复Uart2 默认值 jgkJF[t`  
    UART2_DeInit(); P XH"%vVF  
     A18&9gY  
    //波特率 115200 #Fl5]> |  
    //字长 8位 = UART2_WORDLENGTH_8D nJ ZQRRa:C  
    //停止位 1 = UART2_STOPBITS_1 HgY#O r(  
    //校验方式 无校验 UART2_PARITY_NO f:).wi Ld  
    //同步模式 UART2_SYNCMODE_CLOCK_DISABLE 禁用 6{qI  
    //模式: 允许发送和接受 UART2_MODE_TXRX_ENABLE >o#^)LN  
    UART2_Init((u32)115200, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO , UART2_SYNCMODE_CLOCK_DISABLE , UART2_MODE_TXRX_ENABLE); ToNRY<!  
     clcj5=:  
    //中断配置 Data Register Not Empty interrupt !R`)S7!  
    UART2_ITConfig(UART2_IT_RXNE,ENABLE  ); fV\ eksBF  
     %)|_&Rh  
    //启用Uart2 gk*Md+  
    UART2_Cmd(ENABLE ); xIrRFK9[Q  
   r2Wx31j{  
} M[Kk43;QY!  
3XOf-v:~  
void UART2_SendByte(u8 data) */kX|Sur  
{ Z Rjqjx  
    UART2_SendData8((unsigned char)data); B!#F!Wk"  
    /* Loop until the end of transmission */ mp\`9j+{  
    while ( UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET ); Y?^1=9?6  
} ZgXn8O[a  
i l)LkZ@  
void UART2_SendString(u8* Data,u16 len) JLZ[sWP='  
{ RyxEZ7dC<y  
  u16 i=0; ;M95A  
  for(;i<len;i++) c<(LXf+61  
    UART2_SendByte(Data); bay7%[BLB  
   P/'9k0zs)  
} =36e&z-#  
EK-Qa<[|  
/* mJ>@Dh3>G  
u8 UART2_ReceiveByte(void) $?dAO}f3O)  
{ :*{>=BD  
     u8 USART2_RX_BUF; R m{\ R  
     while (UART2_GetFlagStatus(UART2_FLAG_RXNE) == RESET); ][b2Q>  
     USART2_RX_BUF=UART2_ReceiveData8(); 6]#\|lds1  
     return  USART2_RX_BUF; Ww }qK|D  
      h,D6MP  
} s`bC?wr5h  
*/ xyoh B#'W  
/pa8>_,~  
/* [\j@_YYd  
* 函数名:fputc &SzLEbU!  
* 描述  :重定向c库函数printf到USART1 f +#  
* 输入  :无 hKT]M[Pv  
* 输出  :无 Mohy;#8Wk  
* 调用  :由printf调用 m-~eCFc  
*/ (,J`!Y hS  
int fputc(int ch, FILE *f) lu GEBPi  
{   Qe~2'Hw#9  
/* 将Printf内容发往串口 */ 'k9?n)<DW  
  UART2_SendData8((unsigned char) ch); Lnk!zj  
  while (!(UART2->SR & UART2_FLAG_TXE)); .45XS>=z#  
f[@M  
  return (ch); ~okIiC]#  
} NjTVinz  
`VT0wAe2;  
/******************************************************** ~)S Q{eK?&  
* 函数名:itoa A0NNB%4|/  
* 描述  :将整形数据转换成字符串  9"@P.8_  
* 输入  :-radix =10 表示10进制,其他结果为0 yqg&dq  
*         -value 要转换的整形数 C~2/ 5  
*         -buf 转换后的字符串 >PsP y.  
*         -radix = 10 "4{_amgm&<  
* 输出  :无 5 i1T?  
* 返回  :无 )$#r6fQO  
* 调用  :被USART1_printf()调用 CIM 9~:\  
*******************************************************/ Y:nF.An3  
static char *itoa(int value, char *string, int radix) !Q,A#N(  
{ c=YJ:&/5&  
    int     i, d; sP0pw]!  
    int     flag = 0; >.D0McQg  
    char    *ptr = string; (1bz.N8z  
ZKG S?z  
    /* This implementation only works for decimal numbers. */ L`i#yXR  
    if (radix != 10) C?n3J  
    { CqXD z  
        *ptr = 0; iL-I#"qT,  
        return string; 23/!k}G"  
    } (% fl  
o:\RJig<  
    if (!value) O<R6^0B42  
    { qAH@)}  
        *ptr++ = 0x30; LE_1H >  
        *ptr = 0; hT&,5zaWdv  
        return string; o6pnTu  
    } mm3goIi; Y  
i^{.Q-  
    /* if this is a negative value insert the minus sign. */ 1i}Rc:  
    if (value < 0) _tfZg /+)  
    { d[.kGytUt  
        *ptr++ = '-'; >4:W:;R  
w;.'>ORC  
        /* Make the value positive. */ }b9#.H9  
        value *= -1; %h** L'~``  
    } l`2X'sw[/  
eNlE]W,=  
    for (i = 10000; i > 0; i /= 10) 6 ^X$;  
    { PXGS5,  
        d = value / i; r}i<cyL  
d"nz/$  
        if (d || flag) N\<RQtDg  
        { a1p:~;f}[  
            *ptr++ = (char)(d + 0x30); iTU 8WWY<  
            value -= (d * i); /&=E=S6  
            flag = 1;  Z*d8b  
        } \#5t%t  
    } 8<$6ufvOv  
[L1pDICoy  
    /* Null terminate the string. */ 9?r|Y@xh]  
    *ptr = 0; Q5e ,[1  
wTFM:N  
    return string; e-4XNL[F  
g$~3@zD  
} /* NCL_Itoa */ :X[(ymWNE  
rE"`q1b#  
/************************************************************************ c/ wzV  
* 函数名:USART1_printf ]GYO`,  
* 描述  :格式化输出,类似于C库中的printf,但这里没有用到C库 &I.UEF2,  
* 输入  :-USARTx 串口通道,这里只用到了串口1,即USART1 Nt#zr]Fz  
*             -Data   要发送到串口的内容的指针 : j&M&+  
*               -...    其他参数 t=iSMe  
* 输出  :无 ]Ff"o7gT  
* 返回  :无 "GP!]3t  
* 调用  :外部调用 krZ J"`  
*         典型应用USART1_printf( "\r\n this is a demo \r\n" ); AiSO|!<.N  
*                     USART1_printf(  "\r\n %d \r\n", i ); DO(-)i zC  
*                     USART1_printf(  "\r\n %s \r\n", j ); ~=HN30  
***************************************************************************/ s+>""yi  
void USART2_printf( uint8_t *Data,...) L)VEA8}  
{ 9|T%q2O  
  const char *s; i TY4X:x  
  int d;   U9IP`)z_5t  
  char buf[16]; qUSImgg  
  va_list ap; In|:6YDL&  
  va_start(ap, Data); $rDeI-)S  
g^(wZ$NH  
  while ( *Data != 0)     // 判断是否到达字符串结束符 C>Qgd9  
  {                                           cj-P&D[Ny[  
      if ( *Data == 0x5c )  //'\' |@={:gRJ{x  
      {                                       ,+P!R0PNH  
              switch ( *++Data ) I,vy__ sZ  
              { {zBf*x  
                      case 'r':                                      //回车符 nnIBN4  
                              UART2_SendData8(0x0d); XF(I$Mxl6  
                              Data ++; km'3[}8o&  
                              break; tfj6#{M5  
8qn1? Lb  
                      case 'n':                                      //换行符 !v^D}P 3Y  
                              UART2_SendData8(0x0a);     Kxz<f>`b/  
                              Data ++; JpE4 o2  
                              break; blph&[`}I  
                       @HJ&"72$<  
                      default: bT}P":*y  
                              Data ++; %(Sy XZ  
                          break; }6.R.*Imz  
              }             `?{QCBVj  
      } -W wFUm  
      else if ( *Data == '%') bLGgu#  
      {                    // [=9-AG~}  
    switch ( *++Data ) vmL% %7  
      {                 >|!F.W  
        case 's':                        //字符串 KgX~PP>  
        s = va_arg(ap, const char *); M~w =ZJ@  
          for ( ; *s; s++) 2}>jq8Y47  
      { ,xB&{ J  
        UART2_SendData8(*s); t>f<4~%MJ  
        while (UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET); p!>FPS  
          } m v%fX2.  
      Data++; Qn(e[ C6\  
          break; ;rJR+wpNa  
fLL_{o0T  
          case 'd':    //十进制 cjsQm6  
          d = va_arg(ap, int); jZS6f*$  
          itoa(d, buf, 10); ! lgsV..R  
          for (s = buf; *s; s++) <~t38|Ff@  
    { eX7Ev'(H  
      UART2_SendData8(*s); ii0AhQ  
      while (UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET); <",4O  
        } Q+)fI  
    Data++; v'Gqdd-#)  
        break; Ev%4}GwO4  
    default: 9r@r\-  
    Data++; LEvdPG$)  
    break; "0 \U>h  
    }         /4+M0Pl  
     } /* end of else if */ !YSAQi;I  
    else UART2_SendData8(*Data++); ~F^=7oq  
    while (UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET); -}@3,G  
  } 048BQ  
} [>::@[  


评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

一般

差劲
离线wangdanq

性别:
帅哥
发帖
743
金币
226
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 1楼 发表于: 2016-11-13
谢谢分享   学习学习



性别:
人妖
发帖
626
金币
18
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 2楼 发表于: 2016-11-13
不错,赞!


快速回复
限150 字节
 
上一个 下一个