精华内容
下载资源
问答
  • STM8S003F3P6

    2017-05-23 19:41:39
    STM8S003F3P6开发板资料
  • STM8S003F3U6TR_STM8S003K3T6C_STM8S003F3P6__规格书_Datasheet_资料
  • STM8S003F3P6中文资料 ST意法单片机STM8S003F3P6,STM8S系列常用料号!8KB闪存,128字节,16 MHz,10位ADC,3个定时器.世联芯科技长期供应ST意法8位MCU单片机.
  • STM8S003F3P6共享资料

    2016-11-15 17:25:37
    STM8S003F3P6共享资料
  • Stm8s003f3p6最小系统

    2018-05-02 21:18:47
    Stm8s003f3p6最小系统,用的AltiumDesigner,可以直接拿来用,方便实用
  • STM8S003F3P6最小系统 STM8最小系统 20脚的单片机
  • STM8S003F3P6单片机核心板PDF原理图PCB+AD集成封装库文件, ALTIUM工程转的PDF原理图PCB文件+AD集成封装库,已在项目中验证,可以做为你的设计参考。 集成封装列表: ASM1117 Capacitor Header 10 Header, 10-Pin ...
  • 关于STM8S003F3P6TR

    千次阅读 2019-08-10 14:23:32
    STM8S003F3P6TR 品牌: ST Microelectronics 无铅情况/RoHs: 否 系列 STM8S 核心处理器 STM8 核心尺寸 8-位 速度 16MHz 连接性 I²C,IrDA,LIN,SPI,UART/USART 外设 欠压检测/复位,POR,PWM,WDT I/O数 16 程序...

    STM8S003F3P6TR
    品牌: ST Microelectronics
    无铅情况/RoHs: 否
    系列 STM8S
    核心处理器 STM8
    核心尺寸 8-位
    速度 16MHz
    连接性 I²C,IrDA,LIN,SPI,UART/USART
    外设 欠压检测/复位,POR,PWM,WDT
    I/O数 16
    程序存储容量 8KB(8K x 8)
    程序存储器类型 闪存
    EEPROM容量 128 x 8
    RAM容量 1K x 8
    电压-电源(Vcc/Vdd) 2.95 V ~ 5.5 V
    数据转换器 A/D 5x10b
    振荡器类型 内部
    工作温度 -40°C ~ 85°C(TA)
    封装/外壳 20-TSSOP
    封装尺寸 TSSOP 20

    展开全文
  • STM8S003F3P6最小系统AD版,包含原理图、PCB文件
  • STM8S003F3P6最小系统开发板AD设计原理图+PCB+3D图,ad 设计的工程文件,包括原理图及PCB印制板图,可以用Altium Designer(AD)软件打开或修改,可作为你产品设计的参考。
  • STM8S003F3P6最小系统核心板硬件AD设计原理图+PCB+2D3D封装库文件,采用2层板设计,板子大小为22x28mm,双面布局布线,主要器件为STM8S003F3P6,AMS1117,Mini_USB及2.54接插件。AltiumDesigner 设计的工程文件,包括...
  • stm8s003f3p6点亮六个LED灯,IAR工程包

    热门讨论 2013-12-05 13:51:43
    stm8s003f3p6点亮六个LED灯,IAR工程包 给初学STM的一个参考,LED的连接请看程序。
  • 刚刚接触stm8单片机不久,原理图和PCB是自己画的,PCB板也是自己印刷的,使用的是感光膜法印刷,印刷质量还行,焊接后调试一切顺利。很喜欢PCB制板,就自己摸索了一段,感光膜法效果...stm8s003f3p6最小系统板实物展示:
  • STM8S003F3P6_MLX90614测温IAR源码,亲测可用,里面包含硬件连接图和源码,附带有MLX90614其他资料
  • stm8s003f3p6最小系统原理图与PCB

    热门讨论 2015-05-28 19:33:42
    Stm8s003f3p6最小系统原理图与PCB.rar (751.97 KB, 下载次数: 83) 刚刚接触stm8单片机不久,原理图和PCB是自己画的,PCB板也是自己印刷的,使用的是感光膜法印
  • MINI USB 接口STM8S003F3P6最小系统开发板ALTIUM设计原理图PCB+3D集成库,采用2层板设计,板子大小为28x21mm,双面布局布线, Altium Designer 设计的工程文件,包括原理图及PCB文件,可以用Altium(AD)软件打开或...
  • 版权声明:本文为CSDN博主「qlexcel」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文...随着STM8的停产,新唐的N76E003 pin对pin替换STM8S003F3P6,而且很便宜,故这个时候拿来替换使用再好不过。 下面...

    版权声明:本文为CSDN博主「qlexcel」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qlexcel/article/details/81069808

     

    随着STM8的停产,新唐的N76E003 pin对pin替换STM8S003F3P6,而且很便宜,故这个时候拿来替换使用再好不过。

    下面开始准备资料和搭建环境:

    一、直接上新唐官网,搜索“N76E003”,下载下面的资料:

        前面两个BSP分别是IAR和Keil的示范例程;第三个是Keil的支持包和下载器的USB驱动;第三个是ISP的支持包,可以通过内含的软件串口下载程序,就像51单片机一样,但是前提是先给MCU烧写了BootLoader,这个有点坑,你得先通过nu-link-pro和Nu-Link-Me把ISP的BootLoader烧进去,才能使用ISP。

        程序烧写器和在线调试器是nu-link-pro和Nu-Link-Me。

    开发软件是Keil和IAR,在Keil上通过nu-link-pro和Nu-Link-Me可以像STM32一样,下载程序,在线仿真,实时查看变量什么的。

    关于量产:可以使用nu-link-pro来脱机烧录程序,如上图,先通过电脑端程序把程序脱机到nu-link-pro中,然后连接N76E003,给烧写器供电,按一下nu-link-pro上的按钮就可以烧写了,换一片,再按一次按钮,又烧写一片。详情看这个:https://max.book118.com/html/2017/0215/91658713.shtm

     

    注意几个坑:

    1、使用的Keil要是Keil for 51,使用for ARM的Keil是怎么都找不到N76E003的。

    2、装好Keil for 51后,要安装新唐Keil的支持包,安装过程需要让你填入Keil的安装路径,请正确填入,这样器件列表才能有N76E003。在装好后,会有安装调试器USB驱动的选项,默认是不勾的,如果你没装过nu-link-pro和Nu-Link-Me的驱动,要勾上,安装驱动。

    3、nu-link-pro和Nu-Link-Me上有电平选择的跳线,根据你项目的电平来选择。如果你项目板子上是5V供电的,那么nu-link-pro和Nu-Link-Me也要选择5V的,不然找不到芯片。

    4、要用MCU的程序存储flash存储数据,官方是有例程的。

    但是要记得到“Utilities”里去把“Erase Full Chip”去掉,改为“Erase Used Sectors”不然你保存的数据在每次下载程序时就会被擦除。


    ————————————————
    版权声明:本文为CSDN博主「qlexcel」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

     

     

    大盛唐电子为Nuvoton新唐合作伙伴,新唐代理商。负责新唐单片机系列在中国区的推广和销售,解决客户在使用新唐系列产品中存在的问题。联系电话/微信 15818636023 Bill 李先生,在线QQ:1975014611。

    展开全文
  • MINIUSB接口STM8S003F3P6单片机核心板ALTIUM设计硬件原理图PCB+3D集成封装库文件,层板设计,Altium Designer 设计的工程文件,包括完整的原理图及PCB文件,可以用Altium(AD)软件打开或修改,可作为你产品设计的参考...
  • stm8s003开发板 硬件spi接上sx1278,收到的数据显示到oled屏幕上。 可做数据传输和距离测试。
  • 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)协议、硬件及调试效果

    调试效果硬件

    总结:

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

    展开全文
  • 电路设计_STM8S003F3P6 AWU&ADC使用小结

    千次阅读 2017-03-10 17:24:53
    本文简单介绍了STM8S003F3P6芯片的不同工作模式及相应的功耗情况,重点介绍了AWU和ADC同时使用时的注意事项,给自己留个备份,供大家参考。

    序言

    现象:当ADC初始化之后,再进休眠,那么AWU唤醒会出现异常,表现为唤醒不成功。
    解决办法:在睡眠唤醒之后初始化ADC,在进休眠之前关闭ADC功能。

    工作模式


    Run mode
        正常运行模式,功耗最大。

    Wait mode
        在运行模式下执行WFI(等待中断)指令,可进入等待模式。此时CPU停止运行,但外设与中断控制器仍保持运行,因此功耗会有所降低。等待模式可与PCG(外设时钟门控),降低CPU时钟频率,以及选择低功耗时钟源(LSI,HSI)相结合使用,以进一步降低系统功耗。参见时钟控制 (CLK)的说明。
        在等待模式下,所有寄存器与RAM的内容保持不变,之前所定义的时钟配置也保持不变(主时钟状态寄存器CLK_CMSR)。 当一个内部或外部中断请求产生时,CPU从等待模式唤醒并恢复工作。

    Active halt mode
        活跃停机模式与停机模式类似,但它不需要外部中断唤醒。它使用AWU,在一定的延时后产生一个内部唤醒事件,延迟时间是用户可编程的。
        在活跃暂停模式下,主振荡器、CPU及几乎所有外设都被停止。如果AWU和IWD已被使能,则只有LSI RC与HSE仍处于运行状态,以驱动AWU和IWD计数器。为进入活跃停机模式,需首先使能AWU(如AWU章节所述),然后执行HALT指令。

    Halt mode
        在该模式下主时钟停止。即由f MASTER 提供时钟的CPU及所有外设均被关闭。因此,所有外设均没有时钟,MCU的数字部分不消耗能量。
        在停机模式下,所有寄存器与RAM的内容保持不变,默认情况下时钟配置也保持不变(主时钟状态寄存器CLK_CMSR)。 MCU可通过执行HALT指令进入停机模式。外部中断可将MCU从停机模式唤醒。外部中断指配置为中断输入的GPIO端口或具有触发外设中断能力的端口。
        在这种模式下,为了节省功耗主电压调节器关闭。仅低电压调节器(及掉电复位)处于工作状态。

    功耗清单







    根据表格内容,我们可以估算出各个部分的功耗情况如下:
    · MVR: About 135uA
    · Flash: About 60uA
    · AWU + LSI: About 4uA

    总结

        所以,为了降低芯片的待机功耗,在芯片进入休眠状态之前,需要切换工作时钟源为LSI,将Flash切换为掉电模式,将供电切换为LPVR。
        我在应用的时候发现,将Flash切换为掉电模式后会存在不稳定的情况,具体表现为工作一段时间之后死机。在当前应用里面没有将Flash处于掉电模式,实测功耗在120uA左右,1000mAH的电池可待机1年,基本满足使用需求。

    参考链接

    ST_AN2857《STM8S and STM8A family power management 》
    展开全文
  • 菜鸡新手求助怎么将stm32f103代码移植到stm8s003f3p6 #include "stm32f10x.h" #include "stdio.h" #include "delay.h" #include "stm32f10x_usart.h" #include "stm32...
  • ●采用16 MHz先进STM8内核架构和三级管道●扩展指令集●程序内存:8KbytesFlash;数据保留经过100次循环后55C20年●RAM:1KB●数据存储器:128字节的真数据EEPROM;耐久性高达100000次写入/擦除周期●2.95至5.5V的...
  • STM8S003F3P6TR性能

    2021-05-20 10:25:45
  • 关于STM8S003F3P6开发的笔记v

    万次阅读 2017-07-04 00:01:15
    淘宝买了个STM8S003开发板,只有几块钱啊有木有!!!感觉完全是冲着他这么便宜的价钱买来的,不过话又说回来了便宜没好货,这话一点也不价。最近调试激光农业设备,自己买来了STM32F407这款当今(2017年7月)依然是...
  • PlatformIO开发STM8S003F3P6

    2021-08-12 19:50:07
    最近我想控制4个HX711,用ESP8266把称重数据实时传到电脑,可是ESP8266的实时性不够,还有功率太大,会在电源上产生噪声。我想用STM8缓冲数据,STVP的开发环境不支持...#include "stm8s_gpio.h" void main(void) { //.
  • 灵动MM32F0010A1T使用高性能的ARM Cortex-M0为内核的32位MCU,工作频率可高达48兆赫兹,内置SRAM高速存储器,丰富的增强型I/O端口和外设连接到外部总线。MM32F0010A1T包含1个12位的ADC、1个16位通用定时器、1个16位...
  • 众所周知,意法半导体的STM8S系列主流8位微控制器适于工业、消费类和计算机市场的多种应用,特别是要实现大批量的情况。基于STM8专有内核,STM8S系列采用ST的130纳米工艺技术和先进内核架构,主频达到24 MHz,处理...
  • N76E003为新唐高速1T 8051单片机系列产品,提供18 KB Flash ROM、可配置Data Flash与高容量1 KB SRAM,支持2.4V至5.5V宽工作电压与-40℃至105℃工作温度,并具备高抗干扰...003对比.png(18.78 KB, 下载次数: 64) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 494
精华内容 197
关键字:

stm8s003f3p6