【新年花灯秀】STM32F401RCT6 花样点灯
<div class='showpostmsg'> 本帖最后由 lijinlei 于 2025-1-21 13:04 编辑<p><strong>RGB 三色 LED 循环点亮</strong></p>
<p>5076954fcfaef84c3c8f6658568e2422</p>
<p> </p>
<p><strong>流水灯</strong><br />
cab4c9670847c7e0bcb20d4a9362648f<br />
</p>
<p><strong>RGB 灯代码</strong></p>
<pre>
<code class="language-cpp">#include "main.h"
#include "gpio.h"
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&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(&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(&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(&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(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
</code></pre>
<p> </p>
<p>工程使用 STM32CubeMX 生成,根据开发板原理图,控制 GPIO 输出高低电平并延时。</p>
<div style="text-align: center;"></div>
<div><span style="font-size:18px;">该开发板由本人设计,主要特点是彩色丝印——<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®Cortex®-M4 32 位 RISC 核心,工作频率高达 84 MHz。</p>
<div style="text-align: center;"></div>
<p cid="n9" mdtype="paragraph">Cortex®-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 °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 °C 至 85/105/125 °C</p>
</li>
</ul>
</li>
<li cid="n22" mdtype="list_item">
<p cid="n23" mdtype="paragraph">内核:带 FPU 的 Arm 32 位 Cortex-M4 CPU、允许从闪存执行零等待状态的自适应实时加速器(ART 加速器™)、频率高达 84 MHz、内存保护单元、105 DMIPS/1.25 DMIPS/MHz (Dhrystone 2.1) 和 DSP 指令®®</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 μA/MHz(外设关闭)</p>
</li>
<li cid="n53" mdtype="list_item">
<p cid="n54" mdtype="paragraph">停止(停止模式下的闪光灯,快速唤醒时间):42 μA 典型值 @ 25 °C;最大 65 μA @25 °C</p>
</li>
<li cid="n55" mdtype="list_item">
<p cid="n56" mdtype="paragraph">停止(在深度掉电模式下闪烁,唤醒时间缓慢):在 25 °C typ@低至 10 μA;最大 28 μA @25 °C</p>
</li>
<li cid="n57" mdtype="list_item">
<p cid="n58" mdtype="paragraph">待机:2.4 μA @25 °C / 1.7 V,无 RTC;12 μA @85 °C @1.7 V</p>
</li>
<li cid="n59" mdtype="list_item">
<p cid="n60" mdtype="paragraph">V蝙蝠RTC 电源:1 μA @25 °C</p>
</li>
</ul>
</li>
<li cid="n61" mdtype="list_item">
<p cid="n62" mdtype="paragraph">1×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 嵌入式跟踪宏单元™®</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 × 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> </p>
</div>
<div style="text-align: center;"> </div>
<p>完整工程见<strong><span style="color:#2980b9;">附件</span></strong>。</p>
<div><br />
<br />
<br />
</div>
<p> </p>
<p> </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> <p>速度很快啊~~~第一个花灯点亮上线啦</p>
<p>建议那几个字用LED灯显示,这样就更酷了。</p>
<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&goto=findpost&pid=3390091&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>
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>
lijinlei 发表于 2025-1-21 18:08
哈哈,开发板上还有 OLED 屏接口,打算用来播放电子烟花
<p>真不错呀,期待!!</p>
<p>第一个完成,这个必须得点赞,花灯做好能有个阵列的灯会效果比较好,高级点再弄个屏</p>
页:
[1]