STM8 UART2

发布者:skyshoucang最新更新时间:2018-07-24 来源: eefocus关键字:STM8  UART2 手机看文章 扫描二维码
随时随地手机看文章

#include"stm8s.h"

#include"stm8s_conf.h"

#include"UART2.h"

#include"stdarg.h"

 

void    UART2_Config(u32 Rate)

{

      CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1,     ENABLE);

      GPIO_Init(UART2_PORT,    TX2_PIN,     GPIO_MODE_OUT_PP_LOW_FAST);

      GPIO_Init(UART2_PORT,    RX2_PIN,     GPIO_MODE_IN_PU_NO_IT);

      UART2_Init(Rate, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO, UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE);

      UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE);

      UART2_Cmd(ENABLE);

}

 

void    UART2_SendByte(u8 Byte)

{

      while(!(UART2->SR & TC)); 

      UART2->DR = Byte;

}

 

#pragma vector =ITC_IRQ_UART2_RX + 2

__interrupt void   UART2_IRQHandler(void)

    u8  Temp;

    if(UART2->SR & UART2_SR_RXNE)

    {

       Temp  =UART2->DR;

       UART2->SR = ~UART2_SR_RXNE;

       UART2_SendByte(Temp);

    }   

}

 

char   * UART2_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;

}

void UART2_Printf(u8 *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_SendByte(0x0d);   

 

Data++;

break;

case 'n':          //换行符

UART2_SendByte(0x0a);

Data++;

break;

default:

Data++;

   break;

}

 

}

else if(*Data=='%'){  //

switch (*++Data){

case 's':  //字符串

                s = va_arg(ap, const char *);

                for ( ; *s; s++) {

                    UART2_SendByte(*s);

                }

Data++;

                break;

            case 'd':  //十进制

                d = va_arg(ap, int);

                UART2_itoa(d, buf, 10);

                for (s = buf; *s; s++) {

                    UART2_SendByte(*s);

                }

Data++;

                break;

default:

Data++;

   break;

}  

}

else UART2_SendByte(*Data++);

}

}


关键字:STM8  UART2 引用地址:STM8 UART2

上一篇:STM8 IAP笔记
下一篇:STM8 Timer1基本定时

推荐阅读最新更新时间:2024-03-16 16:09

STM8-灯每隔1S亮灭一次
目的:熟悉语句GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins); 和语句GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);的使用。 #include stm8s.h #define uint unsigned int #define uchar unsigned char #define ulong unsigned long void delay(ulong i) { while(i--); } void main() { GPIO_DeInit(GPIOD); GPI
[单片机]
STM8 FOR IAR 中实现绝对地址跳转
//使用函数指针来实现 typedef void(*PFUN)(void); pFun =(PFUN)0x8000; (*pFun)(); #define GotoHere(a) ((void (*)(void))a)() GotoHere(0X8000); asm( JP $8000 );
[单片机]
STM8 自动唤醒(AWU)
简介 AWU是用来当MCU进入低功耗的活跃停机(Active Halt)模式时提供一个内部的唤醒时间基准。该时间基准的时钟是由内部的低速RC振荡器时钟(LSI)或者通过预分频的HSE晶振时钟来提供的。 STM8的LSI时钟测量 在使用LSI低速内部时钟时,为了确保最好的精度,它的频率可以通过TIM3的输入捕捉1来测定。 (表18:AWU时钟框图) 注意:LS低速时钟源的选择是通过编程CKAWUSEL选项位来实现的。详见时钟控制器章节。 AWU操作 为了使用STM8的AWU功能,按顺序执行如下步骤: 1.使用AWU_CSR寄存器的MSR位和TIM3的输入捕捉通道1来检测LS的时钟频率; 2.通过写AWU_APR的APR 位来定义
[单片机]
<font color='red'>STM8</font> 自动唤醒(AWU)
STM8的学习—LED
无论学习什么都要先从简单的东西入手,驱动小灯都会成为学习者的第一课,让小灯闪烁,通过配置IO口的状态,让IO口隔间隔的输出高低电平,间隔时间为ms级的否则认的肉眼难以设别小灯的亮灭! 程序如下: #include iostm8s105c6.h unsigned int i; //时钟初始化 void CLK_Init(void) { CLK_CKDIVR = 0x00; } //GPIO初始化 void GPIO_Init(void) { PD_DDR|=0x01; //PD0输出,其余保持原功能 PD_CR1|=0x01; //对应位设置为推挽输出 PD_CR2|=0x00; //输出最
[单片机]
STM8单片机ADC连续采样模式
STM8S003单片机内部ADC为12位,A/D转换的各个通道可以执行单次和连续的转换模式。 单次转换模式的意思就是,ADC每次转换一次数据后,就会停止转换,如果还需要继续转换的话,就需要手动开启第二次转换功能。 连续转换模式的意思就是每次转换结束后,系统会自动开启第二次转换,不需要手动设置第二次转换的开启,也就是说连续转换模式只需要开启一次。 ADC框图如下: ADC连续模式转换时序图如下: 通过时序图可以看出,在第2次转换完成后,第一次采样的结果才会输出,也就是结果输出比采样滞后了一个周期。 下面用代码来实现ADC的连续转换模式: #include adc.h #include main.h
[单片机]
<font color='red'>STM8</font>单片机ADC连续采样模式
电磁炉中电容式触控的原理
相较于机械式按键和电阻式触摸按键,电容式触摸按键不仅耐用,造价低廉,机构简单易于安装,防水防污,而且还能提供如滚轮、滑动条的功能。但是电容式触摸按键也存在很多的问题,因为没有机械构造,所有的检测都是电量的微小变化,所以对各种干扰敏感得多。ST针对家电应用特别是电磁炉应用,推出了一个基于STM8系列8位通用微控制器平台的电容式触摸感应方案,无需增加专用触摸芯片,仅用简单的外围电路即可实现电容式触摸感应功能,方便客户二次开发。 方案介绍 ST的电容式触摸按键方案通过一个电阻和感应电极的电容CX构成的阻容网络的充电/放电时间来检测人体触摸所带来的电容变化。如图1所示,当人手按下时相当于感应电极上并联了一个电容CT,增加了感应电极上的
[单片机]
电磁炉中电容式触控的原理
stm8串口通信调试总结 (TTL)
一、硬件连接 一.GPIO及USART1初始化结构体变量定义 /* 调试串口Pin和配置 */ #define DEF_UBR_BAUDRATE 115200 #define DBG_UART USART1 #define DBG_UART_CLK CLK_Peripheral_USART1 #define DBG_UART_TX_PIN GPIOC, GPIO_Pin_2 #define DBG_UART_RX_PIN GPIOC, GPIO_Pin_3 二.串口时钟及GPIO端口时钟使能 USART1是挂在 CLK_Periphera
[单片机]
<font color='red'>stm8</font>串口通信调试总结 (TTL)
STM8 IAP升级程序设计详解 - IAR环境
1.STM8内存空间分配 首先我们在STM8L15x的官方手册中查看一下CPU的内存空间分配: 除了系统预留的部分我们实际用到的内存空间并不多,下面简单说明主要部分: -- RAM 0x00 0000 - 0x00 0FFF(最大 4KB, 包含堆栈区,栈区最大513bytes): -- Data EEPROM 0x00 1000 - 0x00 17FF(最大2KB): STM8定义的专门用于保存掉电数据一块区域,操作方法与内部Flash大致相同。只是可以不用擦除就能直接写。 -- Option bytes 0x00 4800 - 0x00 48FF -- GPIO and Perpheral registers 0x00 5
[单片机]
<font color='red'>STM8</font> IAP升级程序设计详解 - IAR环境
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved