lijinlei 发表于 2025-1-21 12:54

【新年花灯秀】STM32F401RCT6 花样点灯

<div class='showpostmsg'> 本帖最后由 lijinlei 于 2025-1-21 13:04 编辑

<p><strong>RGB 三色 LED 循环点亮</strong></p>

<p>5076954fcfaef84c3c8f6658568e2422</p>

<p>&nbsp;</p>

<p><strong>流水灯</strong><br />
cab4c9670847c7e0bcb20d4a9362648f<br />
&nbsp;</p>

<p><strong>RGB 灯代码</strong></p>

<pre>
<code class="language-cpp">#include &quot;main.h&quot;
#include &quot;gpio.h&quot;

void SystemClock_Config(void);

int main(void)
{
HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

while (1)
{
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
               
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);
               
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);
}
/* USER CODE END 3 */
}

/**
* <a href="home.php?mod=space&amp;uid=159083" target="_blank">@brief </a>System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/** Configure the main internal regulator output voltage
*/
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);

/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&amp;RCC_OscInitStruct) != HAL_OK)
{
    Error_Handler();
}

/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&amp;RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
    Error_Handler();
}
}
</code></pre>

<p><strong>流水灯代码</strong></p>

<pre>
<code class="language-cpp">#include "main.h"
#include "gpio.h"

void SystemClock_Config(void);

int main(void)
{
SystemClock_Config();

MX_GPIO_Init();

while (1)
{
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);
               
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET);
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_SET);
               
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET);
               
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_SET);
               
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_RESET);
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_SET);
               
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5, GPIO_PIN_RESET);
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5, GPIO_PIN_SET);
               
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
               
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET);
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_SET);
               
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
                HAL_Delay(100);
                HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
}
/* USER CODE END 3 */
}

void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/** Configure the main internal regulator output voltage
*/
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);

/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&amp;RCC_OscInitStruct) != HAL_OK)
{
    Error_Handler();
}

/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&amp;RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
    Error_Handler();
}
}
</code></pre>

<p>&nbsp;</p>

<p>工程使用 STM32CubeMX 生成,根据开发板原理图,控制 GPIO 输出高低电平并延时。</p>

<div style="text-align: center;"></div>

<div><span style="font-size:18px;">该开发板由本人设计,主要特点是彩色丝印&mdash;&mdash;<span style="color:#e74c3c;"><strong>蛇年赛博春联</strong></span>,主控为高性能 STM32F401RCT6 芯片,具有板载RGB LED以及多个用户自定义LED,便于实现多种闪烁效果; Flash 扩展和 IIC OLED 以及 TFT 屏等多功能接口,便于实现更多显示效果。</span></div>

<div style="text-align: center;"></div>

<h4 cid="n108" mdtype="heading">设计亮点</h4>

<ul cid="n109" data-mark="-" mdtype="list">
        <li cid="n110" mdtype="list_item">
        <p cid="n111" mdtype="paragraph">支持 FLASH 扩展;</p>
        </li>
        <li cid="n112" mdtype="list_item">
        <p cid="n113" mdtype="paragraph">支持用户按键、LED调控;</p>
        </li>
        <li cid="n114" mdtype="list_item">
        <p cid="n115" mdtype="paragraph">支持所有 GPIO 引脚外部连接;</p>
        </li>
        <li cid="n116" mdtype="list_item">
        <p cid="n117" mdtype="paragraph">支持电源供电扩展,便于更多外设供电;</p>
        </li>
        <li cid="n118" mdtype="list_item">
        <p cid="n119" mdtype="paragraph">支持 SWD 接口下载程序;</p>
        </li>
        <li cid="n120" mdtype="list_item">
        <p cid="n121" mdtype="paragraph">支持 1.8 寸 TFT 屏模块接口,配合彩色动态画面显示,使整个界面融为一体;</p>
        </li>
        <li cid="n122" mdtype="list_item">
        <p cid="n123" mdtype="paragraph">支持 IIC OLED 显示屏模块接口,配合温湿度传感器等,显示相关信息;</p>
        </li>
        <li cid="n124" mdtype="list_item">
        <p cid="n125" mdtype="paragraph">配合暖冬图片和半透明立体雪花效果,营造浓厚的冬季氛围;</p>
        </li>
        <li cid="n126" mdtype="list_item">
        <p cid="n127" mdtype="paragraph">春联包含辞旧迎新的美好祝愿,突出对中华传统文化和祖国壮丽河山的向往之情;</p>
        </li>
</ul>

<p cid="n7" mdtype="paragraph">STM32F401RCT6 基于高性能 ARM&reg;Cortex&reg;-M4 32 位 RISC 核心,工作频率高达 84 MHz。</p>

<div style="text-align: center;"></div>

<p cid="n9" mdtype="paragraph">Cortex&reg;-M4 核心具有浮点单元 (FPU) 单精度,支持所有 ARM 单精度数据处理指令和数据类型。它还实现了一套完整的 DSP 指令和内存保护单元 (MPU),增强了应用程序的安全性。</p>

<p cid="n10" mdtype="paragraph">STM32F401RCT6 集成了高速嵌入式存储器 (256KB 闪存,64kKB SRAM),以及广泛的增强型 GPIO 和外设,连接到两个APB总线,两个 AHB 总线和一个 32 位多 AHB 总线矩阵。所有器件都提供一个 12 位 ADC,一个低功耗RTC,六个通用的 16 位定时器,包括一个用于电机控制的 PWM 定时器,两个通用的 32 位定时器。它们还具有标准和先进的通信接口。</p>

<p cid="n11" mdtype="paragraph">STM32F401xB/STM32F401xC 在 - 40 至 + 125 &deg;C 的温度范围内工作,电源电压为 1.7 (PDR OFF) 至 3.6 V。一套全面的省电模式允许设计低功耗应用。</p>

<p cid="n12" mdtype="paragraph">这些特性使 STM32F401xB/STM32F401xC 微控制器适用于广泛的应用。</p>

<h4 cid="n13" mdtype="heading">功能参数</h4>

<ul cid="n14" data-mark="-" mdtype="list">
        <li cid="n15" mdtype="list_item">
        <p cid="n16" mdtype="paragraph">带 BAM 的动态效率线(批量采集模式)</p>

        <ul cid="n17" data-mark="-" mdtype="list">
                <li cid="n18" mdtype="list_item">
                <p cid="n19" mdtype="paragraph">1.7 V 至 3.6 V 电源</p>
                </li>
                <li cid="n20" mdtype="list_item">
                <p cid="n21" mdtype="paragraph">温度范围:-40 &deg;C 至 85/105/125 &deg;C</p>
                </li>
        </ul>
        </li>
        <li cid="n22" mdtype="list_item">
        <p cid="n23" mdtype="paragraph">内核:带 FPU 的 Arm 32 位 Cortex-M4 CPU、允许从闪存执行零等待状态的自适应实时加速器(ART 加速器&trade;)、频率高达 84 MHz、内存保护单元、105 DMIPS/1.25 DMIPS/MHz (Dhrystone 2.1) 和 DSP 指令&reg;&reg;</p>
        </li>
        <li cid="n24" mdtype="list_item">
        <p cid="n25" mdtype="paragraph">记忆</p>

        <ul cid="n26" data-mark="-" mdtype="list">
                <li cid="n27" mdtype="list_item">
                <p cid="n28" mdtype="paragraph">高达 256 KB 的闪存</p>
                </li>
                <li cid="n29" mdtype="list_item">
                <p cid="n30" mdtype="paragraph">512 字节的 OTP 内存</p>
                </li>
                <li cid="n31" mdtype="list_item">
                <p cid="n32" mdtype="paragraph">高达 64 KB 的 SRAM</p>
                </li>
        </ul>
        </li>
        <li cid="n33" mdtype="list_item">
        <p cid="n34" mdtype="paragraph">时钟、复位和电源管理</p>

        <ul cid="n35" data-mark="-" mdtype="list">
                <li cid="n36" mdtype="list_item">
                <p cid="n37" mdtype="paragraph">1.7 V 至 3.6 V 应用电源和 I/O</p>
                </li>
                <li cid="n38" mdtype="list_item">
                <p cid="n39" mdtype="paragraph">POR、PDR、PVD 和 BOR</p>
                </li>
                <li cid="n40" mdtype="list_item">
                <p cid="n41" mdtype="paragraph">4 至 26 MHz 晶体振荡器</p>
                </li>
                <li cid="n42" mdtype="list_item">
                <p cid="n43" mdtype="paragraph">内部 16 MHz 工厂调整 RC</p>
                </li>
                <li cid="n44" mdtype="list_item">
                <p cid="n45" mdtype="paragraph">用于 RTC 的 32 kHz 振荡器,带校准</p>
                </li>
                <li cid="n46" mdtype="list_item">
                <p cid="n47" mdtype="paragraph">带校准的内部 32 kHz RC</p>
                </li>
        </ul>
        </li>
        <li cid="n48" mdtype="list_item">
        <p cid="n49" mdtype="paragraph">功耗</p>

        <ul cid="n50" data-mark="-" mdtype="list">
                <li cid="n51" mdtype="list_item">
                <p cid="n52" mdtype="paragraph">运行:128 &mu;A/MHz(外设关闭)</p>
                </li>
                <li cid="n53" mdtype="list_item">
                <p cid="n54" mdtype="paragraph">停止(停止模式下的闪光灯,快速唤醒时间):42 &mu;A 典型值 @ 25 &deg;C;最大 65 &mu;A @25 &deg;C</p>
                </li>
                <li cid="n55" mdtype="list_item">
                <p cid="n56" mdtype="paragraph">停止(在深度掉电模式下闪烁,唤醒时间缓慢):在 25 &deg;C typ@低至 10 &mu;A;最大 28 &mu;A @25 &deg;C</p>
                </li>
                <li cid="n57" mdtype="list_item">
                <p cid="n58" mdtype="paragraph">待机:2.4 &mu;A @25 &deg;C / 1.7 V,无 RTC;12 &mu;A @85 &deg;C @1.7 V</p>
                </li>
                <li cid="n59" mdtype="list_item">
                <p cid="n60" mdtype="paragraph">V蝙蝠RTC 电源:1 &mu;A @25 &deg;C</p>
                </li>
        </ul>
        </li>
        <li cid="n61" mdtype="list_item">
        <p cid="n62" mdtype="paragraph">1&times;12 位、2.4 MSPS 模数转换器:多达 16 个通道</p>
        </li>
        <li cid="n63" mdtype="list_item">
        <p cid="n64" mdtype="paragraph">通用 DMA:具有 FIFO 和突发支持的 16 流 DMA 控制器</p>
        </li>
        <li cid="n65" mdtype="list_item">
        <p cid="n66" mdtype="paragraph">多达 11 个定时器:多达 6 个 16 位定时器、2 个高达 84 MHz 的 32 位定时器,每个定时器具有多达 4 个 IC/OC/PWM 或脉冲计数器和正交(增量)编码器输入、两个看门狗定时器(独立和窗口)和一个 SysTick 定时器</p>
        </li>
        <li cid="n67" mdtype="list_item">
        <p cid="n68" mdtype="paragraph">调试模式</p>

        <ul cid="n69" data-mark="-" mdtype="list">
                <li cid="n70" mdtype="list_item">
                <p cid="n71" mdtype="paragraph">串行线调试 (SWD) 和 JTAG 接口</p>
                </li>
                <li cid="n72" mdtype="list_item">
                <p cid="n73" mdtype="paragraph">Cortex-M4 嵌入式跟踪宏单元&trade;&reg;</p>
                </li>
        </ul>
        </li>
        <li cid="n74" mdtype="list_item">
        <p cid="n75" mdtype="paragraph">多达 81 个 I/O 端口,具有中断功能</p>

        <ul cid="n76" data-mark="-" mdtype="list">
                <li cid="n77" mdtype="list_item">
                <p cid="n78" mdtype="paragraph">所有 IO 端口均可承受 5 V 电压</p>
                </li>
                <li cid="n79" mdtype="list_item">
                <p cid="n80" mdtype="paragraph">多达 78 个高达 42 MHz 的快速 I/O</p>
                </li>
        </ul>
        </li>
        <li cid="n81" mdtype="list_item">
        <p cid="n82" mdtype="paragraph">多达 11 个通信接口</p>

        <ul cid="n83" data-mark="-" mdtype="list">
                <li cid="n84" mdtype="list_item">
                <p cid="n85" mdtype="paragraph">最多 3 &times; I2C 接口(1Mbit/s,SMBus/PMBus)</p>
                </li>
                <li cid="n86" mdtype="list_item">
                <p cid="n87" mdtype="paragraph">最多 3 个 USART(2 x 10.5 Mbit/s、1 x 5.25 Mbit/s)、ISO 7816 接口、LIN、IrDA、调制解调器控制)</p>
                </li>
                <li cid="n88" mdtype="list_item">
                <p cid="n89" mdtype="paragraph">多达 4 个 SPI(f 时高达 42 Mbits/s)中央处理器= 84 MHz)、SPI2 和 SPI3,带多路复用全双工 I2S 通过内部音频 PLL 或外部时钟实现音频类精度</p>
                </li>
                <li cid="n90" mdtype="list_item">
                <p cid="n91" mdtype="paragraph">SDIO 接口</p>
                </li>
        </ul>
        </li>
        <li cid="n92" mdtype="list_item">
        <p cid="n93" mdtype="paragraph">高级连接</p>

        <ul cid="n94" data-mark="-" mdtype="list">
                <li cid="n95" mdtype="list_item">
                <p cid="n96" mdtype="paragraph">具有片上 PHY 的 USB 2.0 全速器件/主机/OTG 控制器</p>
                </li>
        </ul>
        </li>
        <li cid="n97" mdtype="list_item">
        <p cid="n98" mdtype="paragraph">CRC 计算单元</p>
        </li>
        <li cid="n99" mdtype="list_item">
        <p cid="n100" mdtype="paragraph">96 位唯一 ID</p>
        </li>
        <li cid="n101" mdtype="list_item">
        <p cid="n102" mdtype="paragraph">RTC:亚秒级精度、硬件日历</p>
        </li>
        <li cid="n103" mdtype="list_item">
        <p cid="n104" mdtype="paragraph">所有软件包均ECOPACK2</p>
        </li>
</ul>

<h3 cid="n105" mdtype="heading">原理图</h3>

<div style="text-align: center;">
<div style="text-align: center;"></div>

<div style="text-align: center;"></div>

<p>&nbsp;</p>
</div>

<div style="text-align: center;">&nbsp;</div>

<p>完整工程见<strong><span style="color:#2980b9;">附件</span></strong>。</p>

<div><br />
<br />
<br />
&nbsp;</div>

<p>&nbsp;</p>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

okhxyyo 发表于 2025-1-21 14:35

<p>速度很快啊~~~第一个花灯点亮上线啦</p>

1084504793 发表于 2025-1-21 17:40

<p>建议那几个字用LED灯显示,这样就更酷了。</p>

lijinlei 发表于 2025-1-21 18:05

<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&amp;goto=findpost&amp;pid=3390091&amp;ptid=1305092" target="_blank"><font color="#999999">1084504793 发表于 2025-1-21 17:40</font></a></font> 建议那几个字用LED灯显示,这样就更酷了。</blockquote>
</div>

<p>建议不错,正在整活儿<img height="52" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/pleased.gif" width="48" /></p>

<p>用 WS2812 做个会闪烁的春联,嘿嘿</p>

lijinlei 发表于 2025-1-21 18:08

okhxyyo 发表于 2025-1-21 14:35
速度很快啊~~~第一个花灯点亮上线啦

<p>哈哈,开发板上还有 OLED 屏接口,打算用来播放电子烟花<img height="52" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan70.gif" width="57" /></p>

okhxyyo 发表于 2025-1-21 18:39

lijinlei 发表于 2025-1-21 18:08
哈哈,开发板上还有 OLED 屏接口,打算用来播放电子烟花

<p>真不错呀,期待!!</p>

秦天qintian0303 发表于 2025-1-22 09:27

<p>第一个完成,这个必须得点赞,花灯做好能有个阵列的灯会效果比较好,高级点再弄个屏</p>
页: [1]
查看完整版本: 【新年花灯秀】STM32F401RCT6 花样点灯