一款基于STM32F407,采用硬件定时器、中断和PWM渐变LED指示灯构建精密数字时钟
构建一个在LCD上显示经过时间的数字时钟。系统通过16x2文本LCD显示经过时间(hh:mm:ss.MMM),同时每秒使用脉宽调制(PWM)技术使LED逐渐变暗。使用RT-Thread RT-Spark开发板上的STM32F407ZGT6微控制器实现。
第一步:设置STM32CubeMX
1. 系统和时钟:
•打开 STM32CubeMX,然后点击“文件”,再选择“新建项目”。
•点击 MCU/MPU 选择器,然后在“商用零件号”中输入 STM32F407ZGT6,双击它。
•在系统核心中,找到 SYS,然后将调试设置为串行线。
•在系统核心中,找到 RCC,然后将高速时钟(HSE)设置为晶体/陶瓷谐振器。
•在时钟配置选项卡中,将HCLK设置为168 MHz。这样APB1定时器的时钟频率就会运行在84 MHz。
2. GPIOGPIO 配置:
•在芯片视图中定位 PG11 至 PG66 引脚。
•左键单击并将其分别设置为 GPIO 输出。
•右键单击并分配用户标签:LCD_RS(PG1)、LCD_EN(PG2)、LCD_D4(PG3)、LCD_D5(PG4)、LCD_D6(PG5)和LCD_D7(PG6)。
3. 定时器2(1ms中断):
•在引脚配置选项卡中,进入定时器,然后选择TIM2。将时钟源设置为内部时钟。
•在“配置”中,进入“参数设置”,将预分频器(PSC)设置为83。
•将计数周期(ARR)设置为999。
•在 NVIC 设置中,启用 TIM22 全局中断。
4. 定时器3(PWM LED调光):
•在引脚配置选项卡中,进入定时器,然后选择TIM3。将时钟源设置为内部时钟。
•将通道1设置为PWM生成CH1。(这会自动分配PA6)
•在“配置”中,进入“参数设置”,将预分频器设为83,计数周期设为999,即可获得1kHz的PWM信号。
•在项目管理器中,设置项目名称,然后将工具链/IDE设为STM32CubeIDE,再生成代码。
第二步:编写LCD库
在 Core 中,右键点击 Inc,然后选择 New,接着选择 HeaderFile。删除其下方所有已写代码,复制并粘贴我提供的代码,将文件命名为 lcd.h。
在 Core 中,右键点击 Src,然后选择 New,接着选择 Source File。删除其下方的所有代码,复制并粘贴我提供的代码,将文件命名为 lcd.c。
第三步:硬件接线与设置
连接LCD:
•VSS:GND
•VDD:5V
•V0:10k电位器的中间腿(外侧腿连接5V和GND)
•RS:PG1
•RW:GND(只写模式)
•PG2
•D4:PG3
•D5:PG4
•D6:PG5
•D7:PG6
•阳极:5V(通过220Ω电阻)
•阴极:GND
连接LED灯:
•将LED的长腿(阳极)连接到电路板上的PA6引脚。
•将短腿(阴极)通过一个220Ω电阻连接到GND。
本文编译自hackster.io





