arm嵌入式led灯闪烁实验报告_嵌入式50——01跑马灯实验

本文详述了使用STM32L4进行跑马灯实验的过程,通过控制GPIO口实现RGB灯的交替闪烁。实验关键在于正确配置IO口,涉及HAL库函数的调用,如GPIO初始化及写入操作。硬件仅需RGB灯,已预接在开发板上,通过改变颜色实现类似跑马灯效果。
摘要由CSDN通过智能技术生成

任何一个单片机,最简单的操作莫过于 IO 口的高低电平控制。

STM32L4 的 IO口作为输出使用的方法

通过代码控制STM32L4开发板上的RGB灯交替闪烁,实现类似跑马灯的效果

该实验的关键在于如何控制 STM32L4 的 IO 口输出

这里对于跑马灯实验,需要添加 13 个源文件。

①②③④

宝贝入怀:嵌入式48——实验工程目录下面的组以及重要文件:​zhuanlan.zhihu.com

⑤ 组 HARDWARE 下面存放的是每个实验的外设驱动代码,他的实现是通过调用 HALLIB下面的 HAL 库文件函数(例如调用电平的翻转函数)实现的,比如 led.c 中函数调用 stm32l4xx_hal_gpio.c 内定义的函数 对 led进行初始化。

// led.c 中函数
#include "led.h"
 * @brief	LED IO初始化函数
 *
 * @param   void
 *
 * @return  void
 */
void LED_Init(void)
{
	/*
		LED-B	PE9
		LED-G	PE8
		LED-R	PE7	
	*/
    GPIO_InitTypeDef GPIO_InitStruct;

    __HAL_RCC_GPIOE_CLK_ENABLE();

    GPIO_InitStruct.Pin = GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MO
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现几个的轮流闪烁。LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SHFRT IS PORT (CLK:IN STD_LOGIC; MODE:IN STD_LOGIC; EN:IN STD_LOGIC; RESET:IN STD_LOGIC; LEDG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END SHFRT; ARCHITECTURE BEHAV OF SHFRT IS TYPE FSM_ST IS(S00,S01,S10,S11,S20,S21,S30,S31,S40,S41,S50,S51,S60,S61,S70,S71,S80,S81,S82); SIGNAL CS,NS:FSM_ST; SIGNAL TEMP:INTEGER RANGE 0 TO 8:=0; SIGNAL REG:STD_LOGIC_VECTOR(7 DOWNTO 0):=(OTHERS=>'0'); BEGIN REG1:PROCESS(CLK,RESET) BEGIN IF RESET='1' THEN CS<=S00; ELSIF CLK'EVENT AND CLK='1' THEN CS<=NS; END IF; END PROCESS; PROCESS(MODE,RESET) BEGIN IF RESET='1' THEN TEMP<=0; ELSIF MODE'EVENT AND MODE='1' THEN IF TEMP<=8 THEN TEMP<=TEMP+1; ELSE TEMP<=0; END IF; END IF; END PROCESS; REG2:PROCESS(CS,TEMP,REG) BEGIN CASE CS IS WHEN S00=>NS<=S01; WHEN S01=> IF TEMP=0 THEN NS<=S01; ELSE NS<=S10; END IF; WHEN S10=>NS<=S11; WHEN S11=> IF TEMP=1 THEN NS<=S11; ELSE NS<=S20; END IF; WHEN S20=>NS<=S21; WHEN S21=> IF TEMP=2 THEN NS<=S21; ELSE NS<=S30; END IF; WHEN S30=>NS<=S31; WHEN S31=> IF TEMP=3 THEN NS<=S31; ELSE NS<=S40; END IF; WHEN S40=>NS<=S41; WHEN S41=> IF TEMP=4 THEN NS<=S41; ELSE NS<=S40; END IF; WHEN S50=>NS<=S51; WHEN S51=> IF TEMP=5 THEN NS<=S51; ELSE NS<=S60; END IF; WHEN S60=>NS<=S61; WHEN S61=> IF TEMP=6 THEN NS<=S61; ELSE NS<=S70; END IF; WHEN S70=>NS<=S71; WHEN S71=> IF TEMP=7 THEN NS<=S71; ELSE NS<=S80; END IF; WHEN S80=>NS<=S81; WHEN S81=> IF TEMP=8 THEN IF REG="01100000" THEN NS<=S82; ELSE NS<=S81; END IF; ELSE NS<=S00; END IF; WHEN S82=> IF TEMP=8 THEN IF REG="00000110" THEN NS<=S81; ELSE NS<=S82; END IF; ELSE NS<=S00; END IF; WHEN OTHERS=>NS<=S00; END CASE; END PROCESS; REG3:PROCESS(CLK,CS) BEGIN IF CLK'EVENT AND CLK='1' THEN CASE CS IS WHEN S00=>REG<=(OTHERS=>'0'); WHEN S01=>REG<=NOT REG; WHEN S10=>REG<="10101010"; WHEN S01=>REG<=NOT REG; WHEN S20=>REG<="00000011"; WHEN S21=> REG(7 DOWNTO 1)<=REG(6 DOWNTO 0); REG(0)<=REG(7); WHEN S30=>REG<="1100000"; WHEN S31=> REG(6 DOWNTO 0)<=REG(7 DOWNTO 1); REG(7)<=REG(0); WHEN S40=>REG<="00000001"; WHEN S41=> REG(7 DOWNTO 1)<=REG(6 DOWNTO 0); WHEN S50=>REG<="10000000"; WHEN S51=> REG(6 DOWNTO 0)<=REG(7 DOWNTO 1); WHEN S60=>REG<="10000001"; WHEN S61=> REG(3 DOWNTO 1)<=REG(2 DOWNTO 0); REG(0)<=REG(3); REG(6 DOWNTO 4)<=REG(7 DOWNTO 5); REG(7)<=REG(4); WHEN S70=>REG<="00011000"; WHEN S71=> REG(2 DOWNTO 0)<=REG(3 DOWNTO 1); REG(3)<=REG(0); REG(7 DOWNTO 5)<=REG(6 DOWNTO 4); REG(4)<=REG(7); WHEN S80=>REG<="00000011"; WHEN S81=> REG(7 DOWNTO 1)<=REG(6 DOWNTO 0); REG(0)<=REG(7); WHEN S82=> REG(6 DOWNTO 0)<=REG(7 DOWNTO 1); REG(7)<=REG(0); WHEN OTHERS=>REG<=(OTHERS=>'0'); END CASE; END IF; END PROCESS; LEDG<=REG WHEN EN='1' ELSE (OTHERS=>'0'); END ARCHITECTURE BEHAV;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值