我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 788|回复: 2

stm8s 串口使用例程代码

[复制链接]

该用户从未签到

3

主题

2

回帖

0

积分

一级逆天

积分
0

终身成就奖

QQ
发表于 2016-11-13 03:34:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
stm8s 串口使用例程代码


* 文件名  :uart.c
* 描述    :串口通信配置函数库     
* 实验平台:iCreate STM8开发板
* 库版本  :V2.0.0
* 作者    :ling_guansheng  QQ:779814207
* 博客    :
*修改时间 :2011-12-20
  iCreate STM8开发板硬件连接
    |--------------------|
    |  USART1_RX-PA4     |
    |  USART1_TX-PA5     |
    |--------------------|

****************************************************************************************/

#include "uart.h"
#include "stm8s.h"
#include "stm8s_clk.h"
#include <stdarg.h>
/* ********************************************
UART2  configured as follow:
  - BaudRate = 115200 baud  
  - Word Length = 8 Bits
  - One Stop Bit
  - No parity
  - Receive and transmit enabled
-  Receive interrupt
  - UART2 Clock disabled
*********************************************/
void Uart_Init(void)
{
    //恢复Uart2 默认值
    UART2_DeInit();
   
    //波特率 115200
    //字长 8位 = UART2_WORDLENGTH_8D
    //停止位 1 = UART2_STOPBITS_1
    //校验方式 无校验 UART2_PARITY_NO
    //同步模式 UART2_SYNCMODE_CLOCK_DISABLE 禁用
    //模式: 允许发送和接受 UART2_MODE_TXRX_ENABLE
    UART2_Init((u32)115200, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO , UART2_SYNCMODE_CLOCK_DISABLE , UART2_MODE_TXRX_ENABLE);
   
    //中断配置 Data Register Not Empty interrupt
    UART2_ITConfig(UART2_IT_RXNE,ENABLE  );
   
    //启用Uart2
    UART2_Cmd(ENABLE );
  
}

void UART2_SendByte(u8 data)
{
    UART2_SendData8((unsigned char)data);
    /* Loop until the end of transmission */
    while ( UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET );
}

void UART2_SendString(u8* Data,u16 len)
{
  u16 i=0;
  for(;i<len;i++)
    UART2_SendByte(Data);
  
}

/*
u8 UART2_ReceiveByte(void)
{
     u8 USART2_RX_BUF;
     while (UART2_GetFlagStatus(UART2_FLAG_RXNE) == RESET);
     USART2_RX_BUF=UART2_ReceiveData8();
     return  USART2_RX_BUF;
   
}
*/

/*
* 函数名:fputc
* 描述  :重定向c库函数printf到USART1
* 输入  :无
* 输出  :无
* 调用  :由printf调用
*/
int fputc(int ch, FILE *f)
{  
/* 将Printf内容发往串口 */
  UART2_SendData8((unsigned char) ch);
  while (!(UART2->SR & UART2_FLAG_TXE));

  return (ch);
}

/********************************************************
* 函数名:itoa
* 描述  :将整形数据转换成字符串
* 输入  :-radix =10 表示10进制,其他结果为0
*         -value 要转换的整形数
*         -buf 转换后的字符串
*         -radix = 10
* 输出  :无
* 返回  :无
* 调用  :被USART1_printf()调用
*******************************************************/
static char *itoa(int value, char *string, int radix)
{
    int     i, d;
    int     flag = 0;
    char    *ptr = string;

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

    if (!value)
    {
        *ptr++ = 0x30;
        *ptr = 0;
        return string;
    }

    /* if this is a negative value insert the minus sign. */
    if (value < 0)
    {
        *ptr++ = '-';

        /* Make the value positive. */
        value *= -1;
    }

    for (i = 10000; i > 0; i /= 10)
    {
        d = value / i;

        if (d || flag)
        {
            *ptr++ = (char)(d + 0x30);
            value -= (d * i);
            flag = 1;
        }
    }

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

    return string;

} /* NCL_Itoa */

/************************************************************************
* 函数名:USART1_printf
* 描述  :格式化输出,类似于C库中的printf,但这里没有用到C库
* 输入  :-USARTx 串口通道,这里只用到了串口1,即USART1
*             -Data   要发送到串口的内容的指针
*               -...    其他参数
* 输出  :无
* 返回  :无
* 调用  :外部调用
*         典型应用USART1_printf( "\r\n this is a demo \r\n" );
*                     USART1_printf(  "\r\n %d \r\n", i );
*                     USART1_printf(  "\r\n %s \r\n", j );
***************************************************************************/
void USART2_printf( uint8_t *Data,...)
{
  const char *s;
  int d;   
  char buf[16];
  va_list ap;
  va_start(ap, Data);

  while ( *Data != 0)     // 判断是否到达字符串结束符
  {                                          
      if ( *Data == 0x5c )  //'\'
      {                                      
              switch ( *++Data )
              {
                      case 'r':                                      //回车符
                              UART2_SendData8(0x0d);
                              Data ++;
                              break;

                      case 'n':                                      //换行符
                              UART2_SendData8(0x0a);   
                              Data ++;
                              break;
                     
                      default:
                              Data ++;
                          break;
              }            
      }
      else if ( *Data == '%')
      {                    //
    switch ( *++Data )
      {               
        case 's':                        //字符串
        s = va_arg(ap, const char *);
          for ( ; *s; s++)
      {
        UART2_SendData8(*s);
        while (UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET);
          }
      Data++;
          break;

          case 'd':    //十进制
          d = va_arg(ap, int);
          itoa(d, buf, 10);
          for (s = buf; *s; s++)
    {
      UART2_SendData8(*s);
      while (UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET);
        }
    Data++;
        break;
    default:
    Data++;
    break;
    }         
     } /* end of else if */
    else UART2_SendData8(*Data++);
    while (UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET);
  }
}
回复

使用道具 举报

  • TA的每日心情
    开心
    27 分钟前
  • 签到天数: 146 天

    [LV.7]常住居民III

    0

    主题

    890

    回帖

    1692

    积分

    二级逆天

    积分
    1692

    终身成就奖特殊贡献奖

    QQ
    发表于 2016-11-13 06:36:14 | 显示全部楼层
    谢谢分享   学习学习
    回复

    使用道具 举报

    该用户从未签到

    11

    主题

    614

    回帖

    100

    积分

    二级逆天

    积分
    100

    社区居民终身成就奖

    QQ
    发表于 2016-11-13 10:14:17 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    每日签到,有金币领取。


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表