上一章节,学会通过GPIO口控制LED灯的开和关,本节介绍如何实现LED灯的周期开和关,实现闪烁效果。

关于LED闪烁的实现方法,一般有以下几种,本章讲解第一种GPIO控制。

1. 采用GPIO控制:将LED连接到MCU的GPIO口上,通过设置GPIO的电平状态来控制LED的亮灭。例如,可以将GPIO的输出状态设置为高电平,延时一段时间,再将GPIO的输出状态设置为低电平,延时一段时间,不断循环这个过程,就可以实现LED的闪烁。
        2. 采用定时器控制:使用MCU内部的定时器模块,设置定时器的计数值和计数方式,当定时器计数到指定值时,就产生一个定时器中断。在定时器中断服务函数中,可以控制LED的亮灭。例如,可以将LED的状态翻转(从亮到灭或从灭到亮),然后重新启动定时器,等待下一次定时器中断的触发。
        3. 采用PWM控制:使用MCU内部的PWM模块,将PWM输出端连接到LED上,通过改变PWM输出的占空比来控制LED的亮度。例如,可以设置PWM的占空比逐渐从0增加到100,然后再逐渐从100减小到0,不断循环这个过程,就可以实现LED的闪烁效果。

GPIO控制主要是通过软件的延时来控制GPIO的输出状态,而RH850F1KM-S4提供了以下几种的实现方法:

1. 软件延时:通过空指令循环、系统计数器等方式实现。
        2.定时器延时:使用内部或外部定时器进行延时控制。
        3.中断延时:通过定时器中断等方式实现延时。

一、软件延迟

<空指令循环>

空指令循环主要是通过延迟函数Delay()强制MCU空转次数来实现延迟,因为非常消耗MCU处理资源同时精度非常低,所以这种方法一般不会在项目上使用,仅适用于练手。

#include "iodefine.h"
//-----------------------------------------IO 初始化----------------------------//void Init_port()
{PORT.PM8&=~(3<<8);  /*配置P8.8、P8.9为输出模式*/PORT.P8|=(3<<8);    /*默认是低电平,P8.8和P8.9需要置1*/
}
//-----------------------------------------延时----------------------------//
void Delay()
{int i;for(i=0;i<2500000;i++){};  /*强制MCU在此处空转2500000次来达到延时效果*/
}
//-----------------------------------------main()----------------------------//
void main(void)
{Init_port();   while(1u){PORT.P8&=~(1<<8);      /*P8.8 设置为低电平*/Delay();PORT.P8|=(3<<8);        /*拉高电平*/Delay();PORT.P8&=~(1<<9);       /*P8.9 设置为低电平*/Delay();PORT.P8|=(3<<8);        /*拉高电平*/}
}

<系统计数器>

系统计数器通过读取系统计数器的计数值,计算延时时间,进而执行GPIO操作。这种方法相比空循环可以有效避免CPU的浪费。

在软件设计方面,首先要确定主时钟频率和系统计数器的时钟源(系统计数器的时钟源可以是主时钟或者主时钟的分频时钟)。
       然后根据时钟源的不同,需要配置相应的系统计数器寄存器,比如 CTCOR(Count Control Register)寄存器,设置计数器的时钟源和计数器重载值等参数。
        最后通过读取系统计数器的计数值,计算延时时间,实现延时函数。

这里我们引用的新的概念,时钟源概念,时钟源等同人体心脏的跳动,给整个系统提供节拍。瑞萨系列的时钟介绍,可以参考下述连接:https://blog.csdn.net/qq_27893147/article/details/114694799?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168224442216800211515243%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168224442216800211515243&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-114694799-null-null.142^v86^insert_down38v5,239^v2^insert_chatgpt&utm_term=%E7%91%9E%E8%90%A8%E6%97%B6%E9%92%9F%E6%BA%90&spm=1018.2226.3001.4187

为什么前面没有配置时钟,程序就可以执行,是因为瑞萨芯片即使没有配置时钟,芯片也会有个默认的时钟和时钟分频器,可以让芯片正常运行,但是由于没有配置时钟,系统的时钟频率和稳定性就没有那么可靠,进而影响程序的性能和稳定性。

瑞萨RH850 F1KM-S4 -LED闪烁相关推荐

  1. [瑞萨RH850学习笔记]——RDC与旋转变压器

    [瑞萨RH850学习笔记]--RDC与旋转变压器 一.旋转变压器基本原理 旋转变压器 使用电磁式方法进行角位移测量的传感器.特点是稳定性高,环境耐受力强,抗干扰能力强,精度较高. 基本原理 本质上是一 ...

  2. 瑞萨RH850/F1L-片上资源分配(Flash,RAM,外设资源)

    瑞萨RH850片上存储资源分配,本博文讲解RH850为176pin LQFP封装: 1.片上Code Flash 2.片上Data Flash 3.片上RAM 版权声明 本博文系广州欧科曼科技有限公司 ...

  3. 瑞萨RH850 FCL、FDL和EEL库的配置和使用

    目录 1.FCL库 1.1.配置FCL库 1.2.使用FCL库 2.FDL库 2.1.配置FDL库 2.2.使用FDL库 3.EEL库 瑞萨RH850 Flash中有两种存储类型:Mapping of ...

  4. 详解AUTOSAR:Green Hills Software(GHS)编译下载瑞萨RH850程序(环境配置篇—2)

    目录 1.配置烧录器参数 2.仿真烧录程序 在学习本篇博文之前,可以先看一看:Green Hills Software(GHS)的安装和申请License文件. 使用GHS编译下载瑞萨RH850程序方 ...

  5. 瑞萨 RH850 FCL、FDL 和 EEL 库的配置和使用

    瑞萨RH850 Flash中有两种存储类型:Mapping of Code Flash Memory和Mapping of Data Flash Memory. Mapping of Code Fla ...

  6. 瑞萨RH850 CS+环境下设置堆和栈空间

    目录 1.设置栈空间 2.设置堆空间 嵌入式软件开发离不开对堆和栈的操作. 栈由操作系统自动分配和释放 ,存放函数的参数值.局部变量的值等.通常都是被调用时处于存储空间中,调用完毕立即释放. 堆由开发 ...

  7. 基于瑞萨RH850的BootLoader调试问题记录

    最近要基于瑞萨的RH850开发BootLoader,调试过程遇到了一些问题,在这里记录一下. 1 Flash擦写问题 1.1 Flash介绍 Flash分为DFlash和CFlash DFlash一般 ...

  8. 瑞萨RH850 FCL库的使用

    FCL功能规范 RAM中的代码执行 自编程应用程序和FCL最初位于代码闪存中.在库操作期间,由于硬件资源忙于flash编程,代码flash通常不可访问.这就是为什么部分用户应用程序和库必须从RAM内存 ...

  9. 瑞萨E1仿真器(R0E000010KCE00)支持的MCU系列--RL78 Family

    瑞萨RL78族的8/16位MCU具有业界领先的低功耗,在正常工作时功耗为45.5μA/MHz,仅时钟工作时功耗为0.57μA/MHz,大大提高了电源效率.内置功能–如高精度(±1%)高速片上振荡器.可 ...

最新文章

  1. JIT Compiler编译器及指令集
  2. redmine plugin
  3. JPA和Hibernate的关系(转)
  4. Android source开发环境搭建
  5. LeetCode Algorithm 797. 所有可能的路径
  6. Angular structural指令host element的定位调试
  7. 话术php源码,恋爱话术宝典织梦源码
  8. 【pytorch】named_parameters()、parameters()、state_dict()==>给出网络的名字和参数的迭代器
  9. ecshop彻底去版权把信息修改成自己的全教程
  10. 使用WM_QUIT终止线程
  11. 能让应届生拿到阿里 Offer 的一份面试题
  12. 做人做事,就两个字!
  13. html+css+jquery制作图片展示效果
  14. 常用的机械3D设计软件大全
  15. ubuntu1604 grep sed 正则表达式
  16. Google TPU的发展历程与思考(一)
  17. C#实现简单气泡屏保(一)
  18. Spring的双生武魂之AOP
  19. msm8953-配置I2C 速率
  20. 2021-01-11小米随身wifi网络创建总是失败是什么问题?

热门文章

  1. 现代通信原理_招生季专业详解读丨天津师范大学电子与通信工程学院
  2. 避免Time Machine备份Parallels Desktop的HDD虚拟硬盘文件
  3. 新旧图幅号转换(Python3)
  4. 生产环境下的LAMP环境搭建
  5. 距离高手,你还缺少刻意练习
  6. 反转链表、旋转链表算法总结
  7. 飘扬PHP医院网上预约挂号,飘扬医院挂号系统
  8. 华为如何在手机桌面显示备忘录的备忘内容
  9. NeoOffice for Mac(mac办公套件)
  10. 【大厂精品】Java 函数优雅之道