Funpack3-5基于Teensy 4.1以太网控制LED灯
该项目使用了Teensy 4.1开发板,实现了通过以太网控制板载LED的设计,它的主要功能为:通过以太网控制板载LED的亮灭。
标签
嵌入式系统
Funpack活动
开发板
远程控制
以太网
teensy4.1
eelover
更新2025-01-13
19

一、项目描述

本项目完成了Funpack3-5活动的任务1:点灯!从板子的以太网排针处引出接口,并通过网口通信,控制板子上的LED灯

选择的是板卡二:Teensy 4.1,Teensy 4.1是一款基于NXP的i.MX RT1062高性能微控制器的开发板,主频可达600 MHz。拥有丰富的I/O接口,扩展出多达42个数字I/O引脚、18个模拟输入引脚和多种通信接口(如SPI、I2C、UART等)。Teensy 4.1支持USB主机和设备模式,并配备了SD卡插槽和额外RAM和ROM扩展焊盘,适合于需要高处理速度和实时性能的项目,如音频处理、图像分析以及机器人控制等应用。其兼容Arduino开发环境,方便开发者快速上手。板子使用以太网功能只需要利用网络扩展模块连接网线即可。


二、软件流程图及各功能对应的主要代码片段及说明

本项目基于Mongoose,Mongoose 是一款嵌入式 Web 服务器库,具有跨平台、轻量级、支持多种网络协议、稳定可靠等特点,官方提供低代码可视化配置工具Mongoose Wizard用于构建Web UI和REST API应用。

以太网初始化:

// initialize the ethernet hardware
void ethernet_init(void) {
CCM_CCGR1 |= CCM_CCGR1_ENET(CCM_CCGR_ON);
// configure PLL6 for 50 MHz, pg 1173
CCM_ANALOG_PLL_ENET_CLR =
CCM_ANALOG_PLL_ENET_POWERDOWN | CCM_ANALOG_PLL_ENET_BYPASS | 0x0F;
CCM_ANALOG_PLL_ENET_SET = CCM_ANALOG_PLL_ENET_ENABLE |
CCM_ANALOG_PLL_ENET_BYPASS
/*| CCM_ANALOG_PLL_ENET_ENET2_REF_EN*/
| CCM_ANALOG_PLL_ENET_ENET_25M_REF_EN
/*| CCM_ANALOG_PLL_ENET_ENET2_DIV_SELECT(1)*/
| CCM_ANALOG_PLL_ENET_DIV_SELECT(1);
while (!(CCM_ANALOG_PLL_ENET & CCM_ANALOG_PLL_ENET_LOCK))
; // wait for PLL lock
CCM_ANALOG_PLL_ENET_CLR = CCM_ANALOG_PLL_ENET_BYPASS;
// configure REFCLK to be driven as output by PLL6, pg 326

CLRSET(IOMUXC_GPR_GPR1,
IOMUXC_GPR_GPR1_ENET1_CLK_SEL | IOMUXC_GPR_GPR1_ENET_IPG_CLK_S_EN,
IOMUXC_GPR_GPR1_ENET1_TX_CLK_DIR);

// Configure pins
IOMUXC_SW_MUX_CTL_PAD_GPIO_B0_14 = 5; // Reset B0_14 Alt5 GPIO7.15
IOMUXC_SW_MUX_CTL_PAD_GPIO_B0_15 = 5; // Power B0_15 Alt5 GPIO7.14
GPIO7_GDIR |= (1 << 14) | (1 << 15);
GPIO7_DR_SET = (1 << 15); // Power on
GPIO7_DR_CLEAR = (1 << 14); // Reset PHY chip
IOMUXC_SW_PAD_CTL_PAD_GPIO_B1_04 = RMII_PAD_INPUT_PULLDOWN; // PhyAdd[0] = 0
IOMUXC_SW_PAD_CTL_PAD_GPIO_B1_06 = RMII_PAD_INPUT_PULLDOWN; // PhyAdd[1] = 1
IOMUXC_SW_PAD_CTL_PAD_GPIO_B1_05 = RMII_PAD_INPUT_PULLUP; // Slave mode
IOMUXC_SW_PAD_CTL_PAD_GPIO_B1_11 = RMII_PAD_INPUT_PULLDOWN; // Auto MDIX
IOMUXC_SW_PAD_CTL_PAD_GPIO_B1_07 = RMII_PAD_INPUT_PULLUP;
IOMUXC_SW_PAD_CTL_PAD_GPIO_B1_08 = RMII_PAD_INPUT_PULLUP;
IOMUXC_SW_PAD_CTL_PAD_GPIO_B1_09 = RMII_PAD_INPUT_PULLUP;
IOMUXC_SW_PAD_CTL_PAD_GPIO_B1_10 = RMII_PAD_CLOCK;
IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_05 = 3; // RXD1 B1_05 Alt3, pg 525
IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_04 = 3; // RXD0 B1_04 Alt3, pg 524
IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_10 = 6 | 0x10; // REFCLK B1_10 Alt6, pg 530
IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_11 = 3; // RXER B1_11 Alt3, pg 531
IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_06 = 3; // RXEN B1_06 Alt3, pg 526
IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_09 = 3; // TXEN B1_09 Alt3, pg 529
IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_07 = 3; // TXD0 B1_07 Alt3, pg 527
IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_08 = 3; // TXD1 B1_08 Alt3, pg 528
IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_15 = 0; // MDIO B1_15 Alt0, pg 535
IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_14 = 0; // MDC B1_14 Alt0, pg 534
IOMUXC_ENET_MDIO_SELECT_INPUT = 2; // GPIO_B1_15_ALT0, pg 792
IOMUXC_ENET0_RXDATA_SELECT_INPUT = 1; // GPIO_B1_04_ALT3, pg 792
IOMUXC_ENET1_RXDATA_SELECT_INPUT = 1; // GPIO_B1_05_ALT3, pg 793
IOMUXC_ENET_RXEN_SELECT_INPUT = 1; // GPIO_B1_06_ALT3, pg 794
IOMUXC_ENET_RXERR_SELECT_INPUT = 1; // GPIO_B1_11_ALT3, pg 795
IOMUXC_ENET_IPG_CLK_RMII_SELECT_INPUT = 1; // GPIO_B1_10_ALT6, pg 791
delay(1);
GPIO7_DR_SET = (1 << 14); // Start PHY chip
// ENET_MSCR = ENET_MSCR_MII_SPEED(9);
delay(1);

// Setup IRQ handler
attachInterruptVector(IRQ_ENET, ENET_IRQHandler);
NVIC_ENABLE_IRQ(IRQ_ENET);
}

LED初始化,设置IO为输出模式,默认输出电平,LED熄灭:

pinMode(LED_BUILTIN, OUTPUT);

定义LED控制结构体变量:

static struct leds s_leds = {false};

下行控制接口:

void glue_set_leds(struct leds *data) {
s_leds = *data; // Sync with your device
if(s_leds.led1==false)
digitalWrite(13,0);
else if(s_leds.led1==true)
digitalWrite(13,1);
}

状态上报:

void glue_get_leds(struct leds *data) {
*data = s_leds; // Sync with your device
}

软件流程图如下所示:

首先初始化以太网和GPIO外设,然后初始化第三方开源网络库,在主循环中根据接受到的命令进行开关灯的控制。

三、功能展示及说明

点击按钮开关,LED点亮:

再点击按钮开关,LED熄灭:


四、对本活动的心得体会

活动很赞,每一季都参加了,既有命题创意也可以自主选择创意,不管是电子设计小白还是高手,都能参与到活动中来,感谢赞助商得捷电子和电子森林!希望有更多类似的活动~~~

附件下载
funpack3_5_teensy41_led_control.zip
arduino代码
团队介绍
电子爱好者一枚
团队成员
eelover
单片机爱好者
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号