精华内容
下载资源
问答
  • stm8s003f3p6原理图
    万次阅读
    2017-07-04 00:01:15

                

                淘宝买了个STM8S003开发板,只有几块钱啊有木有!!!感觉完全是冲着他这么便宜的价钱买来的,不过话又说回来了便宜没好货,这话一点也不价。最近调试激光农业设备,自己买来了STM32F407这款当今(2017年7月)依然是STM32系列的高端旗舰处理器,想起了手机~哈哈。话说回来。.。跑题了,,今天要记录的是STM8S003

    先来看看关于这款坑爹的新片介绍:::

    STM8S核心板 亮点:

       本开发板采用MicroUSB线取电,与智能手机数据线兼容,数据线简单易得,而非USB MINI线取电, USB MINI线不好找到,已经逐渐淘汰,这是本模块区别于其他的家产品的重要特点 。

       超低的价格,人性化的设计,全套的资料,让您省钱,省时,省力,省心!

    STM8S核心板 主要特点:

    1. 使用STM8S003F3P6为主控IC。

    2. 可以用板子上的2.54排针取电或是焊盘取电,使用焊盘取电时,输入电压范围在4.5V-15V,可同时通过排针向外部输出3.3V!

       注意:5V排针与模块的输入电源相连。

    3. 引出所有引脚,引脚旁边标注出该引脚标号,带有复位按键,电源指示灯,和程序演示指示灯,麻雀虽小五脏俱全。

    4. 支持SWIM调试方式。

    技术资料:

    下载链接:

    STM8系列程序资料: http://pan.baidu.com/s/1dDF3QNJ
    STM8软件工具IAR+STVP:   http://pan.baidu.com/s/1sjDfSLJ
    STM8其他资料: http://pan.baidu.com/s/1o6Jpox0

    1.该核心板原理图(PDF格式) 和测试源程序。烧入测试程序,上电后LED灯闪烁,方便您检测核心板是否正常工作。

    2.提供分别在IAR及STVD两种开发环境下寄存器操作和库函数操作的两套配套I/O口例程、定时器例程、UART发送例程、UART接收例程、时钟切换例、AD例程。

    3.STM8应用案例

    4.STM8封装库

    5.STM8各功能模块的寄存器编程

    6.IAR开发环境和STVP烧写软件

    STM8S103F3P6 性能对比:


    看到了吧,关键是只有100次,不过我估计一次也用不了了,,,

    更多相关内容
  • MINI USB 接口STM8S003F3P6最小系统开发板ALTIUM设计原理图PCB+3D集成库,采用2层板设计,板子大小为28x21mm,双面布局布线, Altium Designer 设计的工程文件,包括原理图及PCB文件,可以用Altium(AD)软件打开或...
  • STM8S003F3P6最小系统核心板硬件AD设计原理图+PCB+2D3D封装库文件,采用2层板设计,板子大小为22x28mm,双面布局布线,主要器件为STM8S003F3P6,AMS1117,Mini_USB及2.54接插件。AltiumDesigner 设计的工程文件,包括...
  • STM8S003F3P6最小系统AD版,包含原理图、PCB文件
  • stm8s003f3最小系统原理图

    热门讨论 2015-05-29 10:59:57
    stm8s003f3的最小系统原理图及PCB图
  • 刚刚接触stm8单片机不久,原理图和PCB是自己画的,PCB板也是自己印刷的,使用的是感光膜法印刷,印刷质量还行,焊接后调试一切顺利。很喜欢PCB制板,就自己摸索了一段,感光膜法效果...stm8s003f3p6最小系统板实物展示:
  • STM8S003F3P6最小系统 STM8最小系统 20脚的单片机
  • MINIUSB接口STM8S003F3P6单片机核心板ALTIUM设计硬件原理图PCB+3D集成封装库文件,层板设计,Altium Designer 设计的工程文件,包括完整的原理图及PCB文件,可以用Altium(AD)软件打开或修改,可作为你产品设计的参考...
  • stm8s003f3p6最小系统原理图与PCB

    热门讨论 2015-05-28 19:33:42
    Stm8s003f3p6最小系统原理图与PCB.rar (751.97 KB, 下载次数: 83) 刚刚接触stm8单片机不久,原理图和PCB是自己画的,PCB板也是自己印刷的,使用的是感光膜法印
  • STM8S003F3P6单片机核心板PDF原理图PCB+AD集成封装库文件, ALTIUM工程转的PDF原理图PCB文件+AD集成封装库,已在项目中验证,可以做为你的设计参考。 集成封装列表: ASM1117 Capacitor Header 10 Header, 10-Pin ...
  • STM8S003F3P6最小系统开发板AD设计原理图+PCB+3D图,ad 设计的工程文件,包括原理图及PCB印制板图,可以用Altium Designer(AD)软件打开或修改,可作为你产品设计的参考。
  • 基于STM8S003F3P6单片机设计USB接口LCD12864 显示电压电流表ALTIUM原理图+PCB+软件源码程序,硬件采用2层板设计,大小为63*52mm,包括原理图图及PCB文件、STM8单片机软件代码及说明文档资料,仅供学习设计参考。
  • STM8S003单片机设计超声波测距硬件ALTIUM原理图PCB+3D集成封装库文件,2层板设计,大小为60x60mm,Altium Designer 设计的工程...STM8S003F3P6 Trans Transformer U - MAX232_1 Volt Reg Voltage Regulator XTAL 晶振
  • STM8S003F3P6使用单总线方式和DS18B20建立简单的通讯、DS18B20反馈温度值,数码管显示温度值无小数,利用串口命令可以设置数码管亮灭,温度值上传周期等等。具体以协议为准。程序源码在一个资源里面,下载需要积分,...

    功能介绍:

    STM8S003F3P6使用单总线方式和DS18B20建立简单的通讯、DS18B20反馈温度值,数码管显示温度值无小数,利用串口命令可以设置数码管亮灭,温度值上传周期等等。具体以协议为准。程序源码在一个资源里面,下载需要积分,没有积分的可以私信我。https://download.csdn.net/download/L_e_c/13187959

    硬件设计:

    如下图,一个单片机预留烧录口,两位共阴数码管,数码管在原理图中省略了,一路DS18B20接上拉之后到芯片引脚。一路UART可直接通过USB转TTL模块连接电脑调试。

    软件设计:

    1)主程序设计

    初始化芯片内部flash(给串口命令保存参数用,)初始化IO口(数码管段选及位选),DS18B20初始化,定时器(定时1ms,给主程序做时基用),初始化串口,打开中断。大循环里以Auto_Flag变量分三个方式,程序看明白了其实没有太大的区别;然后就是串口接收到协议相应的命令,给一些标志位置位,然后在大循环里应答,不占用中断时间;system1ms是1ms的时基,显示刷新周期是2*4ms;再往后就是500ms采集一次温度值然后给显示数组赋值(在这里处理的正负温度值),数码管的亮灭也是在500ms的时基里处理的;再下面的Usart1_Rev_flag变量是确定直接返回温度值还是周期返回温度值;后面几乎相同,废话不说,直接贴程序。

    int main(void)
    {
      u8 state=0;
      u8 cclen=0;
    //   u16 Cnt_500ms=0;
       u16 Cnt_2S=0;
       u8 SendCnt_xS=0;
       u8 Cnt_10ms=0;
       
      /*设置内部高速时钟16M为主时钟*/ 
       CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
       FLASH_Initializes();
       
      /*!<Set High speed internal clock */
       delay_init(16);
       
       LED_Init();
       Init_DS18B20();
       Tim1_Init();
       SetLedOFF(); 
        GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_OUT_OD_LOW_FAST);         
        GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT); 
       Uart_Init();
       
      __enable_interrupt(); 
      delay_ms(100);
      Data_Init();
    //  UART1_SendString("Serial Communication ---STM8 Development Board of FengChi Electron ",\
    //             sizeof("Serial Communication ---STM8 Development Board of FengChi Electron"));
      Led_Temp[0]=11;
      Led_Temp[1]=11;
      if(Auto_Flag==0){
        Usart1_Rev_Cot_flag=0;
      }
      else if(Auto_Flag==1)
      {
        Usart1_Rev_Cot_flag=1;
      }
      else if(Auto_Flag==2)
      {
        Usart1_Rev_Cot_flag=1;
        SendTime_Num=1;
      }
      
      
      while (1)
      { 
        if(Auto_Flag==0){
            if (SendTime_Flag==1)
            {
              SendTime_Flag=0;
              UART1_SendString("ok\r\n",4);
            }
            if(SendAuto_Flag==1){
              SendAuto_Flag=0;
              UART1_SendString("ok\r\n",4);
            }
            if(system1ms==1)
            {
              system1ms=0;
              if(++Cnt_10ms>=2)
              {
                Cnt_10ms=0;
                switch (state)
                {
                  case 0 :{
                    state = 1;
                    Assembly_2(~0X00);
                    Assembly_8(~seg7[Led_Temp[0]]);
                    Assembly_2(~0X01);
                  }break;
                  case 1 :{
                    state = 2;
                    Assembly_2(~0X00);
                    Assembly_8(~seg7[Led_Temp[1]]);
                    Assembly_2(~0X02);
                  }break;
                  case 2 :{
                    state = 3;
                    Assembly_2(~0X00);
                    Assembly_8(~seg7[Led_Temp[0]]);
                    Assembly_2(~0X01);
                    Temptrue=Read_DS18B20();
                  }break;
                  case 3 :{
                    state = 0;
                    Assembly_2(~0X00);
                    Assembly_8(~seg7[Led_Temp[1]]);
                    Assembly_2(~0X02);
                  }break;
                  default: state = 0;
                  break;
                }
              } 
              if(++Cnt_2S>=500)
              {
                  Cnt_2S=0;
                  if(Temptrue>=0){
                    cclen=sprintf(Send_Server,"Temptrue=%02d.%01d;\r\n",Temptrue/10,Temptrue%10);
                    Led_Temp[0]=Temptrue/100+12;  
                    Led_Temp[1]=Temptrue/10%10;
                  }
                  else
                  {
                    cclen=sprintf(Send_Server,"Temptrue=-%02d.%01d;\r\n",(0-Temptrue)/10,(0-Temptrue)%10);
                    if((0-Temptrue)>199) Led_Temp[0]=(0-Temptrue)/100+12;  
                    else if((0-Temptrue)>99)  Led_Temp[0]=11+14;
                    else Led_Temp[0]=11+13;
                                        Led_Temp[1]=(0-Temptrue)/10%10+12;
                  }
                  if(Usart1_Rev_Cot_flag==0)
                  {
                    Led_Temp[0]=11;
                    Led_Temp[1]=11;
                    Temptrue=Read_DS18B20();
                  }
                  
              }
            }  
            if(Usart1_Rev_flag==1){
              Usart1_Rev_flag=0;
              UART1_SendString(Send_Server,cclen);
            }
            else {
              if(system1S==1){
                system1S=0;
                if(SendTime_Num!=0){
                  if(++SendCnt_xS>=SendTime_Num){
                    SendCnt_xS=0;
                    UART1_SendString(Send_Server,cclen);
                  }
                }
              }
            }
          
        }else if(Auto_Flag==1){
          if (SendTime_Flag==1)
            {
              SendTime_Flag=0;
              UART1_SendString("ok\r\n",4);
            }
            if(SendAuto_Flag==1){
              SendAuto_Flag=0;
              UART1_SendString("ok\r\n",4);
            }
            if(system1ms==1)
            {
              system1ms=0;
              if(++Cnt_10ms>=2)
              {
                Cnt_10ms=0;
                switch (state)
                {
                  case 0 :{
                    state = 1;
                    Assembly_2(~0X00);
                    Assembly_8(~seg7[Led_Temp[0]]);
                    Assembly_2(~0X01);
                  }break;
                  case 1 :{
                    state = 2;
                    Assembly_2(~0X00);
                    Assembly_8(~seg7[Led_Temp[1]]);
                    Assembly_2(~0X02);
                  }break;
                  case 2 :{
                    state = 3;
                    Assembly_2(~0X00);
                    Assembly_8(~seg7[Led_Temp[0]]);
                    Assembly_2(~0X01);
                    Temptrue=Read_DS18B20();
                  }break;
                  case 3 :{
                    state = 0;
                    Assembly_2(~0X00);
                    Assembly_8(~seg7[Led_Temp[1]]);
                    Assembly_2(~0X02);
                  }break;
                  default: state = 0;
                  break;
                }
              } 
              if(++Cnt_2S>=500)
              {
                  Cnt_2S=0;
                  if(Temptrue>=0){
                    cclen=sprintf(Send_Server,"Temptrue=%02d.%01d;\r\n",Temptrue/10,Temptrue%10);
                    Led_Temp[0]=Temptrue/100+12;  
                    Led_Temp[1]=Temptrue/10%10;
                  }
                  else
                  {
                    cclen=sprintf(Send_Server,"Temptrue=-%02d.%01d;\r\n",(0-Temptrue)/10,(0-Temptrue)%10);
                    if((0-Temptrue)>199) Led_Temp[0]=(0-Temptrue)/100+12;  
                    else if((0-Temptrue)>99)  Led_Temp[0]=11+14;
                    else Led_Temp[0]=11+13;
                                        Led_Temp[1]=(0-Temptrue)/10%10+12;
                  }
                  if(Usart1_Rev_Cot_flag==0)
                  {
                    Led_Temp[0]=11;
                    Led_Temp[1]=11;
                    Temptrue=Read_DS18B20();
                  }
                  
              }
            }  
            if(Usart1_Rev_flag==1){
              Usart1_Rev_flag=0;
              UART1_SendString(Send_Server,cclen);
            }
            else {
              if(system1S==1){
                system1S=0;
                if(SendTime_Num!=0){
                  if(++SendCnt_xS>=SendTime_Num){
                    SendCnt_xS=0;
                    UART1_SendString(Send_Server,cclen);
                  }
                }
              }
            }
          }
        else if(Auto_Flag==2){
          if (SendTime_Flag==1)
            {
              SendTime_Flag=0;
              UART1_SendString("ok\r\n",4);
            }
            if(SendAuto_Flag==1){
              SendAuto_Flag=0;
              UART1_SendString("ok\r\n",4);
            }
            if(system1ms==1)
            {
              system1ms=0;
              if(++Cnt_10ms>=2)
              {
                Cnt_10ms=0;
                switch (state)
                {
                  case 0 :{
                    state = 1;
                    Assembly_2(~0X00);
                    Assembly_8(~seg7[Led_Temp[0]]);
                    Assembly_2(~0X01);
                  }break;
                  case 1 :{
                    state = 2;
                    Assembly_2(~0X00);
                    Assembly_8(~seg7[Led_Temp[1]]);
                    Assembly_2(~0X02);
                  }break;
                  case 2 :{
                    state = 3;
                    Assembly_2(~0X00);
                    Assembly_8(~seg7[Led_Temp[0]]);
                    Assembly_2(~0X01);
                    Temptrue=Read_DS18B20();
                  }break;
                  case 3 :{
                    state = 0;
                    Assembly_2(~0X00);
                    Assembly_8(~seg7[Led_Temp[1]]);
                    Assembly_2(~0X02);
                  }break;
                  default: state = 0;
                  break;
                }
              } 
              if(++Cnt_2S>=500)
              {
                  Cnt_2S=0;
                  if(Temptrue>=0){
                    cclen=sprintf(Send_Server,"Temptrue=%02d.%01d;\r\n",Temptrue/10,Temptrue%10);
                    Led_Temp[0]=Temptrue/100+12;  
                    Led_Temp[1]=Temptrue/10%10;
                  }
                  else
                  {
                    cclen=sprintf(Send_Server,"Temptrue=-%02d.%01d;\r\n",(0-Temptrue)/10,(0-Temptrue)%10);
                    if((0-Temptrue)>199) Led_Temp[0]=(0-Temptrue)/100+12;  
                    else if((0-Temptrue)>99)  Led_Temp[0]=11+14;
                    else Led_Temp[0]=11+13;
                                        Led_Temp[1]=(0-Temptrue)/10%10+12;
                  }
                  if(Usart1_Rev_Cot_flag==0)
                  {
                    Led_Temp[0]=11;
                    Led_Temp[1]=11;
                    Temptrue=Read_DS18B20();
                  }
                  
              }
            }  
            if(Usart1_Rev_flag==1){
              Usart1_Rev_flag=0;
              UART1_SendString(Send_Server,cclen);
            }
            else {
              if(system1S==1){
                system1S=0;
                if(SendTime_Num!=0){
                  if(++SendCnt_xS>=SendTime_Num){
                    SendCnt_xS=0;
                    UART1_SendString(Send_Server,cclen);
                  }
                }
              }
            }
          } 
        
      }
    }

    2)DS18B20.c

    编写该程序只需要记住一点,一定要和时序对应起来;首先要留意延时函数,往往延时函数是导致和18B20通讯不成功的主要因素。其他就没有太多要说的了,看源码。

    #include "ds18b20.h"
    
    u16 temp=0;
    s16 Temptrue=0;
    
    /* Private functions ---------------------------------------------------------*/
    /* Public functions ----------------------------------------------------------*/
    void Alarm_for_No_DS18B20(void)
    {
        //单总线上没有发现DS18B20则报警,该动作据具体应用具体处理
    }
    //---------------------------------------------------------------------
    unsigned char DS18B20_Start(void) //复位ds18b20芯片
    {
        unsigned char i,succ=0xff;
        DS18B20_PIN_SET_OUT(); //置为输出口
        DS18B20_WR0();          //总线产生下降沿,初始化开始
        // for(i=0; i<30; i++)delay_us(25); //总线保持低电平在480 - 960微秒之间  ;i<20;(25us)
        delay_us(500);
        DS18B20_WR1();         //总线拉高
        DS18B20_PIN_SET_IN();  //置为输入,主机释放总线,准备接收DS18B20的应答脉冲
        i=0;
        while(R_DS18B20())         //等待DS18B20发出应答脉冲
        {
            delay_us(5);          //5
            if(++i>12)            //DS18B20检测到总线上升沿后等待15-60us
            {
                succ=0x00;           //如果等待大于约60us,报告复位失败
                break;
            }
        }
        i=0;
        while(!R_DS18B20())       //DS18B20发出存在脉冲,持续60-240us
        {
            delay_us(5);         //5
            if(++i>48)            //如果等带大于约240us,报告复位失败
            {
                succ=0x00;
                break;
            }
        }
        delay_us(20);
        return succ;
    }
    //---------------------------------------------------------------------
    void DS18B20_SendU8(unsigned char d8)//向DS18B20写一字节函数
    {
        unsigned char i;
        DS18B20_PIN_SET_OUT();   //置为输出口
        for(i=0; i<8; i++)
        {
            DS18B20_WR0();       //总线拉低,启动“写时间片”
            delay_us(2);            //大于1微妙
            if(d8&0x01)DS18B20_WR1();
            delay_us (32);      //延时至少60微秒,使写入有效
            delay_us (30);
            DS18B20_WR1();       //总线拉高,释放总线,准备启动下一个“写时间片”
            d8>>=1;
            delay_us (1);
        }
        DS18B20_PIN_SET_IN();   //主机释放总线
    }
    //---------------------------------------------------------------------
    unsigned char DS18B20_ReadU8(void)//从DS18B20读1个字节函数
    {
        unsigned char i,d8;
        for(i=0; i<8; i++)
        {
            d8>>=1;
            DS18B20_PIN_SET_OUT();//置为输出口
            DS18B20_WR0();        //总线拉低,启动读“时间片”
            delay_us(2);         //大于1微妙
            DS18B20_WR1();        //主机释放总线,接下来(2~15)us内读有效
            DS18B20_PIN_SET_IN(); //引脚设定为输入口,准备读取
            delay_us(2);         //延时2个us后进行读
    
    
            if(R_DS18B20())d8|=0x80;//从总线拉低时算起,约15微秒内读取总线数据
            delay_us(32);       //60us后读完成
            delay_us(30);
            DS18B20_WR1();       //总线拉高,主机释放总线,准备启动下一个“写时间片”
        }
        DS18B20_PIN_SET_IN();    //主机释放总线
        return(d8);
    }
    //------------------------------------------------------------------------------------
    void Init_DS18B20(void)           //初始化DS18B20
    {
        unsigned char i;
        i=DS18B20_Start();             //复位
        if(!i)                          //单总线上没有发现DS18B20则报警
        {
            Alarm_for_No_DS18B20();
            return;
        }
        DS18B20_SendU8 (SKIP_ROM);  //跳过rom匹配
        DS18B20_SendU8 (WRITE_RAM); //设置写模式
        DS18B20_SendU8 (0x64);        //设置温度上限100摄氏度
        DS18B20_SendU8 (0x8a);        //设置温度下线-10摄氏度
        DS18B20_SendU8 (0x7f);        //12bit(默认)
    }
    
    
    //--------------------------------------------------------------------------------------
    
    unsigned char tl;
        unsigned int  th;
    unsigned int Read_DS18B20(void)  //读取并计算要输出的温度
    {
        unsigned char i;
        
        i=DS18B20_Start();           //复位
        if(!i)                        //单总线上没有发现DS18B20则报警
        {
            Alarm_for_No_DS18B20();
            return 0;
        }
        // delay_ms(1);
        DS18B20_SendU8(SKIP_ROM);     //发跳过序列号检测命令
        DS18B20_SendU8(CONVERT_TEM); //命令Ds18b20开始转换温度
        i=0;
        // delay_ms(1);
        while(!R_DS18B20())       //当温度转换正在进行时,主机读总线将收到0,转换结束为1
        {
            delay_ms(2);
            if(++i>250) break;              //至多转换时间为750ms
        }
        DS18B20_Start();                 //初始化
        // delay_ms(1);
        DS18B20_SendU8(SKIP_ROM);    //发跳过序列号检测命令
        DS18B20_SendU8(READ_RAM);  //发读取温度数据命令
        tl=DS18B20_ReadU8();           //先读低8位温度数据
        th=DS18B20_ReadU8()<<8;        //再读高8位温度数据
        if((th&0xf000)==0xf000)   
          return -((0-(th|tl))*10>>4);
        else 
          return (th|tl)*10>>4;              //温度放大了10倍,*0.0625=1/16=>>4
    }
    
    
    

    3)其他

    内部Flash操作和UART操作,就是一些配置,熟悉库操作就可以,串口接收中断可以看一下处理方式(状态机),后续可以考虑使用帧中断,之后在其他博客会分享。

    4)协议、硬件及调试效果

    调试效果硬件

    总结:

    博客就只是分享了原理图和程序,一些注释也不全。第一个分享,难免有不对之处,欢迎指正交流,谢谢。

    展开全文
  • 硬件开源,基于STM8S003的LIN通讯验证板DEMO。包括原理图,PCB,Gerber生产文件。... 2、STM8S003F3P6TR作为LIN主控/从控; 3、两个可程序控制的LED指示灯和一个自复位按钮开关用于验证LIN总线通信。
  • 板上硬件+开发环境的搭建

    硬件相关

    芯片介绍

    型号:STM8S003F3P6,用的不是ARM内核(STM32用的是ARM),而是意法半导体自己生产的高性能8位内核:

    • STM8AF 主要针对汽车电子应用,如:雨刷、车窗关闭控制机构
    • STM8AL 适用于绿色能源作为供能的汽车电子
    • STM8L 可以满足低功耗与便携设备要求
    • STM8S 主要用于消费及工业控制领域
    • STM8T 基于ProxSense技术可以用在电容接近、触摸识别产品中

    003/005/007:都是基础型、入门型
    基础型
    stm8意味着是8位系统:则 long 是4字节,int 是2字节

    板上硬件图

    STM8S硬件图
    技术参数如下:

    • 频率:16 MHz
    • 电源电压(DC):2.95V (min)
    • 工作电压:2.95V ~ 5.5V
    • 针脚数:20
    • 时钟频率:16.0 MHz
    • RAM大小:1 KB
    • 位数:8
    • 耗散功率:238 mW
    • FLASH内存容量:8 KB
    • 模数转换数(ADC):1
    • 输入/输出(I/O)数:16 Input
    • 工作温度(Max):85 ℃
    • 工作温度(Min):-40 ℃
    • 封装:TSSOP-20

    硬件原理图

    • IR_INTER:红外线(IR:Infrared Radiation)
    • SWIMSWIM引脚为开漏(OD)结构,以此实现双向通信。在NRST复位后,SWIM脚复位进入OFF 状态,此时不能使用此脚为普通 I/O 。通过软件配置可将 SWIM 脚设置为普通 I/O ,使用为普通 I/O 时可能会有较多限制,复位以后将恢复为OFF 状态
    • AP_WORK:无线访问接入点(WAP:WirelessAccessPoint)
    • MCU_PWR_EN1:电源使能
    • RK809_PWRON:电源开(PWRON:Power On)
    • NRSTNRST 引脚产生复位。当 NRST 为低电平时,MCU处于复位状态,重设所有的内部寄存器。

    MCU原理图

    软件相关

    软件开发环境

    软件开发环境的作用是编写程序调试软件功能下载固件到单片机中
    STM8系列一般有 IAR 或者 STVD (ST Visual Develop) 这两个IDE(集成开发环境)选择:

    • IAR :内部集成了 C/C++编译器调试工具链
    • STVD:本身只能够用汇编进行编程,若要使用C进行编程,需要另外下载一个C编译器Cosmic

    烧录工具的选择

    (其实 IAR 既能编程也能烧录)
    STVP:ST Visual Programmer,即ST的一套可视化编程工具。STVP 提供了一个面向ST单片机的Flash全功能烧写环境,可方便地用于读取、写入和校验芯片内部存储器与选项字节,作用总结如下:

    1. STVP 软件可以将固件程序下载到单片机的 FLASH 存储器中
    2. 可以修改STM8系列单片机 EEPROM 存储器中的内容
    3. 可以修改STM8系列单片机的选项字节 options bios 参数

    ST官网STVP下载

    下载 STVP-STM8STVP-LIB-STM8(这个应该是单独源代码库),下载 STVP-STM8 后进行安装时,会自动安装 stvdstvp 这两个工具,安装过程中也会自动安装 ST-Link 驱动。

    下载器工具的选择

    STM8需要 ST-Link 下载器,也是 仿真器 Debugger,虽然软件开发平台在进行编译时,能够指出语法上的错误,但逻辑上的错误却很难指出。这时,仿真器(专指硬件仿真器,下同)就派上用场了。它可用于实现硬件的仿真,可以实现对单片机程序运行的控制,例如单步执行、全速运行、设置断点,可以辅助查找程序中的问题。下图便是ST-LINK V2,中间的4P插针用于STM8硬件仿真,插针顺序(从左向右):目标的 TVCCSWIMGNDRESET
    正面图

    • TVCC:目标MCU的电源,这里不能为目标版供电(3.3V5V可选?)
    • SWIM:目标版SWIM引脚PD1
    • GND:目标板GND(VSS)
    • RESET:目标板NRST引脚1

    ST-LINK的 SWIMRST 与单片机芯片的 SWIMRST 引脚相连后,即可对单片机进行调试和编程操作。

    注意:STM32用到的是 NRST / SWDIO / SWCLK 这几个引脚进行的ST-Link调试,而STM8用到的是RESET / SWIM 这些引脚。

    展开全文
  • 基于STM8S003F3的数字温度计制作

    千次阅读 2020-06-27 19:42:57
     先查看各种芯片的数据手册确定其电气参数(额定电流/电压、参考电路) stm8s芯片电气参数: stm8s003f3芯片工作电压、时钟等。此芯片有内部时钟,所以为了简化电路可以不接外部晶振 然后查看其他电气参数确定引脚...

    资料下载链接(包含源代码)

    链接:https://pan.baidu.com/s/1TFlFqV93jU00CDDDEN-HvA 
    提取码:rezp

    需求分析

    手持式的;按下按钮开始测量;使用液晶屏;

    资料准备

    1. stm8s固件库       2. stm8s芯片手册      3. DS18B20温度传感器   4. 段式液晶屏(KHL030802A)  5. IAR for STM8 V8.09

    硬件设计

    原理图设计

    1. 先查看各种芯片的数据手册确定其电气参数(额定电流/电压、参考电路)

    stm8s芯片电气参数:

    stm8s003f3芯片工作电压、时钟等。此芯片有内部时钟,所以为了简化电路可以不接外部晶振

    然后查看其他电气参数确定引脚驱动电压/电流为后续设置电路做准备,从数据手册中可以看到芯片最大的输出电流为20mA

     

    段式液晶屏(KHL030802A):驱动电压5V,电流手册中没有提到。所以不需要太关心,保证电压即可。电压值可以从段式液晶显示屏在淘宝对应宝贝详情中查找。

     

    DS18B20传感器:1. 驱动电压:3.0V~5.5V,可以直接接单片机IO口

    确认完所有元器件的电气特性后,我们再根据元器件手册中的参考电路图来完成相关器件电路设计

    完整原理图设计:

    PCB设计

    3D效果:

    注:实际产品中这个DS18B20应该通过导线引出来,因为它是测量头需要与物体接触。

    软件设计

    功能:驱动DS18B20并读取它测量到的温度数据并在段式液晶屏上显示。这里主要的程序:DS18B20驱动、段式液晶屏驱动

    DS18B20驱动其实没有什么好说的,若下省事或者说偷懒。那么可以直接从网上复制下别人写的DS18B20代码即可。当然我强烈推荐大家实际自己编写下DS18B20驱动,这样可以使用你对DS18B20理解的更加通透。同时提高了你对阅读数据手册的能力,后面再遇到新的芯片时也不会手足无措。

    DS18B20:

    1. 温度转换精度与转换时间

    2.  8位的CRC检验,这个CRC检验可以省略。但是还是建议大家加上它,一来它可以校验数据确保获取的温度数据的准确性,二来可以熟悉CRC检验的。这个为以后在通信

    3. 读写时序:这个非常重要,后面DS18B20的操作都是要以这个为基础。

    其实时序这些比较简单,我们直接按照它的要求,将对应的IO口电平拉高或者拉低相就时间就行。这里要说明下我们通过单片机读取DS18B20的数据引脚电平时,如果单片机为普通51(端口全部普通IO)那么直接将对应IO引脚释放(相当于给高电平),然后再读取引脚电平。但对于stm8s或者STM32这种单片机(端口可以设置类型:输入/输出),我们在读取DS18B20引脚电平时需要将单片机IO口模式由输出改为输入

    4. DS18B20手册末尾有完整的读写步骤,我们可以直接参考。

    段式液晶屏:

    说明:其实这个有点像数码管也是同时点亮需要显示的一个数码管中的段,然后再快速切换不同的数码管,频率快的话人眼是分辨不出来的它是逐个显示的。

    区别:数码管是单个数码管来逐一显示而这个“段式液晶屏”是整个液晶屏(几个字)的不同段同时显示。驱动比数码管更加麻烦

    分析:从下图中的表格中可以看出来,“段式液晶屏”是从COM1~COM4逐个使能的。也就是说COM1~COM4为一个周期根据手册一般显示频率为60HZ~100HZ频率太低人眼可以明显看到闪烁,频率太高对芯片要求过高。所以经过大家使用总结显示频率:60~100HZ最合适了。

    第一位显示0~9的数字时COM口与DUAN口(下图中表格中5~10列)组合:

    上图红红绿绿的表格中表示了如何让第一位显示0~9的数字,COM1~COM4与DUAN口之间的电平关系

    显示原理:通过COM口(COM1~COM4)与DUAN口(DUAN1~DUAN6)组合来实现显示。COM口与DUAN口是依次控制的,所以会有一个刷新周期。这个周期不能太短,不然后我们肉眼会观看到闪烁现象。

    工程做法:

    COM口的电平每两个周期更换一次,这样是为延长液晶显示屏的使用寿命

     

     

    编程思路:这个是4位的段式液晶屏。COM口(COM1~COM4)与DUAN口(DUAN1~DUAN6:表格中6-10这四列)通过不同组合实现数字的显示。比如:需要显示左边第一位为"0",那么我们需要设置COM1 = 1,DUAN1 = 0,DUAN2 = 1;COM2 = 1,DUAN1 = 1,DUAN2 = 1;COM3=1, DUAN1 = 0,DUAN2 = 1;COM4=1,DUAN1=1,DUAN2 =1.其他的位依次类推。其中列表中5-6列表示左边第一位数的段控制、列表中7-8列表示左边第二位数的段控制、列表9-10列表示第三位数的段控制。最后那个符号的显示控制为4G、4G、4A包含在5、7、9列了。

    驱动程序算法:

    扫描周期内COM1~COM4一般为60~100HZ,通过设置定时器周期来设置。我们的显示代码放置在定时器中断函数。这里有两种算法:

    1.一位一位数的显示即一个COM周期(COM1~COM4)只显示一位数   

    2. 一次显示几位的不同段,分COM口显示。一个COM周期就可以将整个数据显示全

    分析第一种方法所有的时间比第二种方法慢3倍(显示数据为3位)。

    控制要领:

    COM口为扫描周期,DUAN口控制显示的段。即COM1为高电平时,控制DUAN口电平(高:显示;低:不显示)来控制段的显示,然后再COM1为低,COM2为高电平再控制DUAN口电平。然后循环即可,由于我们的电路无法产生负电压脉冲所以延长屏幕寿命的操作不做了。

    主程序流程(循环):

     

    展开全文
  • 读过STM8S003芯片手册的都知道,ADC的分辨率是10位的,也就是最大值是1024,如下 正常的采集电压需要分压电路和基准电压: 采集到的ADC数据跟芯片的供电电压有关系。 下面介绍下一种简便的方法: 先...
  • STM8S003F3 UFQFPN20 ADC采样电压

    千次阅读 2019-10-14 20:24:39
    下面是摘自官方手册的原理图常见的资源基本都有,性能相对也还可以,只不过FLASH程序烧录只有100次,可能不是特别适合新人使用,不过100次的烧写一把而言是绰绰有余。纵观最近几年很少有芯片烧写超过50次。 ...
  • 基于STM8S003f3的单键触摸开关制作

    千次阅读 2020-03-01 17:43:36
    功能需求: 1.单按触摸按键实现:开关功能。按下开,再按下关 2.双击触摸按键实现:延时开关功能。延时时间默认5分钟 硬件设计: ...比如:TTP223-BA6 2.进入st官网www.st.com 软件设计: ...
  • 目录前言代码下载:功能介绍:参考图STM8S103F3最小系统原理图步进电机28BYJ-48ST-Link/V2接线ST-Link/V2stm8s103f3步进电机28BYJ-48+ULN2003效果图工程介绍+烧写工程结构工程设置程序烧写核心代码main.cstep.cstep....
  • 该调速器主要是控制单相异步电容运行电机,电机尾端必须带有测速反馈线圈,该款控制芯片是PIC18F25K20,有程序源代码,另外有一款是STM8S003F3P6,只有STM8S003F3P6.hex的烧录码,需要可以联系VX:xmznkjyxgs,价格...
  • 矩阵键盘电路如下,4*4可以表示16个按键的状态。 检测原理: 按P10-P13为行,P14-P17为列,行(低四位)输出低电平,检测列(高四位)是否有低电平。如果有低电平,说明有按键按下,延时再检测,有按键按下,...
  • STM8SSTM8S之电量采集

    千次阅读 2016-08-30 11:40:11
    本文介绍STM8S系列如何使用ADC的一个通道,对电量进行采集
  • STM8L051F3P6进入halt模式是功耗最低的,因为halt会关闭所有时钟。进入低功耗模式之后可以通过外部中断唤醒。按键需配置为外部中断输入,其它不用的引脚配置为“推挽-输出低-低速”。 void ALL_GPIO_Init() { //...
  • 引言在做智能家居的项目中,经常会遇到对温度的测量,温度是自然界中一个最要的物理参数。无论是在各种实验场所,还是居住休闲场所,还是工业生产场所,温度的采集和控制都十分频繁和重要。...】P...
  • (3) 晶振质量有问题;(4) 负载电容或匹配电容与晶振不匹配或者电容质量有问题;(5) PCB板受潮,导致阻抗失配而不能起振;(6) 晶振电路的走线过长;(7) 晶振两脚之间有走线;(8) 外围电路的影响。解决方案,建议按...
  • 主控芯片使用了STM8S003F3P6,性价比比较高的8位MCU,FLASH有8k,RAM有1k,内部集成了16Mhz时钟,可以不用外部接晶振了。下载也很方便,使用STLINK的SWIM单线下载。 2、点阵显示 点阵电路由4块74HC595移位芯片、3块...
  • 标题基于STM8单片机的一体化超声波测距模块JSN-SR04T程序源代码 相信很多朋友都用过一款JSN-SR04T一体化超声波测距模块或者ASN-SR04T超声波测距模块,这个模块售价很平民,某宝上大约十几RMB到几十RMB左右,能测20-...
  • 初学STM8笔记

    2017-05-16 11:20:30
    本人使用的是:stm8s003f3p6 ->  天猫链接 比较坑的一点是他的原理图乱码,可以先下资料来看看再决定买不买。 资料链接 开始学习 下载编译环境、破解注册等等都已经十分详细,建议参考 ...

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
热门标签
关键字:

stm8s003f3p6原理图