STM8单片机学习总结初步03

发布者:小熊掌心最新更新时间:2017-10-23 来源: eefocus关键字:STM8  单片机  学习总结 手机看文章 扫描二维码
随时随地手机看文章

实物焊接及对应驱动程序全部调试完成,视屏地址为:自制蓝牙灯操作视屏

网络地址:http://v.youku.com/v_show/id_XMjk0ODk1MjUyMA==.html;

实物图01为:

STM8单片机学习总结初步03

实物图02为:

STM8单片机学习总结初步03

---------------

对程序代码均使用“函数分割”形式实现,并添加“适当注释”,这种代码编写方式在初期编写时,会很繁琐,因为其将本可使用“1个函数”实现的代码分割为“2个或2个以上”的“函数”,但在后期维护或是别人接手你的“代码”时,会大大缩短所需时间;

在实际工作中,个人建议,所有东西留2份,若你是个好人,请直接忽略“02”所说内容!!!:

01、第一份:带详细内容注释、问题注释、注意事项等内容,可以让你即时过1年以后,也能在10分钟内把握到核心脉络;

02、第二份:删除主要的内容注释、问题注释、注意事项等内容,让后面的工作变得繁琐一些;好心点的能做到“不留BUG”,这个可以适时考虑;次一点的,会留很多“后窗”,这个相当不推荐;

由于“代码”自由度太高,编写代码的方式也千变万化,所以没有统一的强制规范,到现在为止,也只是有部分所谓的“编程标准”而已,至于“遵守或不遵守”,这就是“个人问题”了;

坊间有句话:“最烦被人写注释,更烦别人不写注释”,这种说法“懂的人自然懂”,就不赘述了;


一下是本人从工程中截取的一些函数,其中:

01、“主函数”只做“按键检测”;

02、“蓝牙”使用“USART中断”执行,保证“实时性”;

03、使用“TIM4”控制“小功率LED灯”进行“0.5m/次”亮灭闪烁,用于指示“程序是否正在运行”;

程序架构及写法均为个人见解,高手见谅:

01、主函数只做“按键检测”为:

int main(void)

{

  // 临时变量,为程序后续运行方便而定义

  uint8_t i = 0; 

  uint8_t key_value = 0;

  uint8_t key01_num = 0,key02_num = 0,key03_num = 0;

  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

  

 

  Led_GPIO_Init();

  

  Relay_GPIO_Init();

  Relay_Left_ALL_OFF();

  Relay_Right_ALL_OFF(); 

  

 

  Key_Init_No_Interrupt_Func();

   

  USART1_Init();//"USART1"初始化函数

  __enable_interrupt();

  

 

  TIM4_Init();

 

  Relay_Left_ALL_OFF();

  Relay_Right_ALL_OFF();

  

  while (1)

  {

    key_value = Key_Get_Value_No_Interrupt_Func(1);

    if(0 != key_value)

    {

      switch(key_value)

      {

      case 1:

        {      

          key_value = 0;

          

          key01_num++;

          if(4 == key01_num)

          {

            key01_num = 0;

          }

          Relay_Right_Single_ON(key01_num);

          break;

        }

      case 2:

        {      

          key_value = 0;

          

          key02_num++;

          if(4 == key02_num)

          {

            key02_num = 0;

          }

          Relay_Left_Single_ON(key02_num);

          break;

        }

      case 3:

        {      

          key_value = 0;

          

          key03_num++;

          if(key03_num >= 12)

          {

            key03_num = 0;

          }

          if((key03_num%2))

          {

              Relay_Left_ALL_OFF();

              Relay_Right_ALL_OFF(); 

          }

          else

          {

              Relay_Left_ALL_ON();

              Relay_Right_ALL_ON(); 

          }

          break;

        }

      default:

        {

          break;

        }

      } 

    }

  }

  return 0;

}

02、“USART中断响应函数”,响应函数位于“stm8s_it.c”中:

i)、“串口初始化”函数:

void USART1_Init(void)

{

  //初始化"USART1"

  UART1_Init((u32)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, \

    UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);

  

  //开启"USART1"接收中断

  UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);

  

  //启动"USART1"

  UART1_Cmd(ENABLE);

}

ii)、“串口响应函数”:

 INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)

 {

   uint8_t temp_rec;

   temp_rec = UART1_ReceiveData8();

   

   USART1_RX_Date_uint8_t = temp_rec;//=========================

   //USART1_Flag = 1;

   Relay_Left_Right_USART1_Action(USART1_RX_Date_uint8_t);//=========================

   

   UART1_ClearITPendingBit(UART1_IT_RXNE);//清"中断"

   UART1_SendData8(temp_rec);

   while((UART1_GetFlagStatus(UART1_FLAG_TXE)) == RESET);//等待发送数据完成   

 }

03、“TIM4”函数,响应函数位于“stm8s_it.c”中::

i)、“TIM4初始化函数”:

void TIM4_Init(void)

{

  TIM4_TimeBaseInit(TIM4_PRESCALER_128, 0xFF);  //初始化,"分频"、"初始值"

  TIM4_ClearFlag(TIM4_FLAG_UPDATE);             //清"标志"

  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);        //配置"中断设置"

  TIM4_Cmd(ENABLE);                             //开启"定时器TIM4"

}

ii)、“TIM4响应函数”:

 INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)

 {

 

    cnt_tim4++;

    if(cnt_tim4==480)

    {

      Led_Triggle();

      cnt_tim4=0;

    }

    TIM4_ClearITPendingBit(TIM4_IT_UPDATE);//清"中断"

 }

只要借助以上几个主要函数,再结合“GPIO”控制“Relay驱动电路”就可以直接控制“功率LED灯”的有效动作;

Note:实际使用时,可以将“功率LED灯”换为其他“驱动器件”,进而控制“市电”或“其他用电器”的有效工作,实现简单的“智能家居控制”,但此时“电压过高”,“危险性很大”,有需要,还是找专业人士更为可靠,切忌“胡乱尝试”;


关键字:STM8  单片机  学习总结 引用地址:STM8单片机学习总结初步03

上一篇:STM8单片机学习总结初步02
下一篇:STM8单片机学习总结04

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

出租车计费仿真原理图+单片机源程序
出租车计费仿真原理图如下 单片机源程序如下: #include reg51.h #include intrins.h unsigned code num ={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; unsigned char data x_pos, y_pos; sbit rs=P2^0; sbit rw=P2^1; sbit e=P2^2; sbit Control=P3^5; bit swit_flg=0; unsigned char time,minte,second; unsigned char result; void dela
[单片机]
出租车计费仿真原理图+<font color='red'>单片机</font>源程序
单片机的ISP 与 IAP
ISP:in system programming, 在系统编程 IAP: in applicatin programming 在应用编程 但两者的操作方式,结果和应用场合有什么区别 什么是ISP: 用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫 在系统编程 ,即不用脱离系统; 什么是IAP: 在应用编程,有芯片本身(或通过外围的芯片)可以通过一系列操作将code写入,比如一款支持Iap的单片机,内分3个程序区,1作引导程序区,2作运行程序区,3作下载区,芯片通过串口接收到下载命令,进入引导区运行引导程序,在引导程序下将new code内容下载到下载区,
[单片机]
16位混合信号微控制器提供多种省电模式
  在医疗器械、工业控制、传感器、数据采集、消费电子等电池供电的应用中,对处理器的功耗都有极为严格的要求。Maxim公司的16位混合信号微控制器MAXQ2010具有独特省电待机模式,待机模式下功耗降至370nA(典型值),+85℃时最大值仅为6.5?A,有效延长了电池供电设备的工作时间。MAXQ2010采用16位MAXQ RISC内核,能够在高速运行(10MHz时高达10MIPS)和进行数据采样(12位ADC转换速率高达312kSPS)的同时保持较低的工作电流(10MHz时典型值为3.1mA)。      MAXQ2010提供64KB闪存和2KB数据RAM,JTAG兼容调试端口提供基于硬件的在电路调试和基于C和汇编语言的编程支持,
[单片机]
为什么有的MCU外接24MHz晶振不能去掉
痞子衡之前写过一篇关于时钟引脚的文章 《i.MXRT1xxx系列MCU时钟相关功能引脚的作用》 ,里面简单提及了外部晶振相关引脚的作用,但是并没有详细展开。最近在客户支持中,有客户咨询项目板级设计上能否将外部 24MHz 晶振完全去掉,就使用芯片内部集成的 RC24M 做初始时钟源。今天痞子衡就详细展开这个话题: Note: 本文中图片代码均以 i.MXRT1050 为例,但内容基本也适用其他 i.MXRT10xx 系列。 一、外部24MHz晶振作用 i.MXRT 系列共有两组外接晶振专用引脚,XTALI/O 用于连接 24MHz 晶振,RTC_XTALI/O 用于连接 32.768KHz 晶振。其中低频 32.76
[单片机]
用PIC16C73单片机实现十二位A/D转换器
1 引言 为监测海洋生态环境,研制了用于海水有机磷农药现场监测的生物传感器。为测定生物传感器的信号,使传感器可用于船载及台站的海洋生态环境现场自动监测,需要对整个的采样和排液装置进行控制以及对传感器来的信号进行实时采集处理,形成有机磷的浓度传给上位机。为此,开发了以PIC16C73单片机为核心的小型测控仪器,很好的完成了上述功能。PIC1673单片机自带8位的A/D转换器,但不能满足系统对精度的要求,本设计在单片机自带8位A/D基础上加少量的硬件和软件开销,使其扩展为十二位A/D转换器,满足了系统的要求。 2 系统构成原理 PIC16C73单片机最大的特点是自带8位A/D转换部件,共有5路A/D通道模拟输入。
[单片机]
用PIC16C73<font color='red'>单片机</font>实现十二位A/D转换器
STM8 UART 发送器
STM8 UART 发送器 发送器根据M位的状态发送8位或9位的数据字。当M位置1,字长为9位,并且第九位(MSB)应该写入寄存器UART_CR1的T8位。 当发送使能位(TE)被设置时,发送移位寄存器中的数据在TX脚上输出,相应的时钟脉冲在SCLK脚上输出。 字符发送 在UART发送期间,在TX引脚上首先移出数据的最低有效位。在此模式里,UART_DR寄存器有一个缓冲器(TDR),位于内部总线和发送移位寄存器之间。 每个字符之前都有一个低电平的起始位;之后跟着数目可配置的停止位。UART支持以下停止位。 注意: 1.在数据传输期间不能复位TE位,否则将破坏TX脚上的数据,因为波特率计数器停止计数。正在传输的当前数据将丢
[单片机]
<font color='red'>STM8</font> UART 发送器
意法半导体(ST)新的汽车微控制器提升智能汽车的安全性
中国,2016年5月19日 横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)推出在汽车市场具有开创性的SPC57系列微控制器首批产品。新产品兼备业内最好的安全保证和性价比,基于成功的32位架构的SPC5微控制器平台,瞄准安全要求严格且成本敏感的汽车系统。汽车系统必须符合最严格的安全要求,乃至ISO26262 ASIL-D汽车安全完整性等级标准。 新微控制器是为解决入门级汽车安全关键应用挑战而专门设计研制的汽车应用系统芯片(SoC),目标应用包括安全气囊、汽车和摩托车防抱死制动系统(ABS,Anti-lock Braking System
[汽车电子]
意法半导体(ST)新的汽车<font color='red'>微控制器</font>提升智能汽车的安全性
以C8051F340单片机为核心的USB数据采集系统设计
1引言 电子设备运行状态的稳定性直接影响到现代企业的生产, 设备发生故障后高昂的维修费以及设备停机后给企业生产带来的损失, 使得各个企业纷纷采取措施, 降低设备的故障率。通过数据采集系统准确的获取设备运行特征数据, 并对数据进行分析,判断设备的运行状态是否良好, 达到提前预防故障出现、减少停机检修的目的。实际应用中对数据采集系统的可靠性, 准确性和便携性要求很高。目前常用的数据传输网络(如RS232 /RS485, CAN 等)已经不能满足大量采集数据和高速实时数据传输的要求。而USB传输具有高速可靠传输的优势, 具有成本低、可靠性高、维护方便等优点。本文以带有片上USB 和高速AD转换器的C8051F340为核心控制器件, 利用
[单片机]
以C8051F340<font color='red'>单片机</font>为核心的USB数据采集系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

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