stm32f103zet6 ili9341(fsmc) freertos 制作数字电子时钟

配置教程请参考 STM32F103ZET6 FREERTOS 双UART 多任务多串口输出(配置教程)

主函数和配置和该教程一模一样,不需要添加什么变动

唯一需要添加的是 在freertos.c 的 void StartTask02(void const * argument)中写如下代码

/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the myTask02 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void const * argument)
{
  /* USER CODE BEGIN StartTask02 */
	char date_time[] = "2024-10-23 12:59:59";
	char str[30]; 
	int year = 2024;
	int month = 10;
	int date = 23;
	int hour = 12;
	int minute = 59;
	int second = 59;
	char month_t[3];
	char date_t[3];
	char hour_t[3];
	char minute_t[3];
	char second_t[3];

  /* Infinite loop */
  for(;;)
  {
    osDelay(996);
		second++;
		if(second == 60){
			second = 0;
			minute++;
			if(minute==60){
				minute = 0;
				hour++;
				if(hour==25){
					hour = 0;
					date++;
					if(month == 1||month == 3||month == 5||month == 7||month == 8||month == 10||month == 12){
						if(date == 32){
							date = 0;
							month++;
							if(month == 13){
								year++;
								month = 1;
							}
						}
					}
					else if(month == 2){
						if(date == 29){
							date = 0;
							month++;
							if(month == 13){
								year++;
								month = 1;
							}
						}
					}
					else{
						if(date == 31){
							date = 0;
							month++;
							if(month == 13){
								year++;
								month = 1;
							}
						}						
					}
				}
			}
		}
		if(date<10){
			sprintf(date_t,"0%d",date);
		}
		else{
			sprintf(date_t,"%d",date);
		}
		if(month<10){
			sprintf(month_t,"0%d",month);
		}
		else{
			sprintf(month_t,"%d",month);
		}
		if(hour<10){
			sprintf(hour_t,"0%d",hour);
		}
		else{
			sprintf(hour_t,"%d",hour);
		}
		if(minute<10){
			sprintf(minute_t,"0%d",minute);
		}
		else{
			sprintf(minute_t,"%d",minute);
		}
		if(second<10){
			sprintf(second_t,"0%d",second);
		}
		else{
			sprintf(second_t,"%d",second);
		}
		//if(month<10||date<10||hour<10||minute<10||second<10){
		//	sprintf(str,"%d - %d - %d %d : %d : %d",year,month,date,hour,minute,second);
		//}
		
		sprintf(str,"%d - %s - %s %s : %s : %s",year,month_t,date_t,hour_t,minute_t,second_t);
		
		//LCD_Clear(BLUE); 为了每次输出不会有上一次输出字符的残留,不过画面会有闪烁,看起来有些异样
		
		LCD_ShowString(40,150,360,32,16,(uint8_t*)str);
		
  }
  /* USER CODE END StartTask02 */
}

效果如下:

有什么问题可以留言或者私信沟通,需要代码文件请告知我

<think>好的,用户现在需要根据之前的室内环境监测系统设计,获取所有需要用到的单片机型号及其详细介绍。首先,我需要回顾之前的对话,确认系统所需的各个模块和功能。之前提到的系统包括温度、湿度、有害气体和噪音传感器,显示屏、报警模块、存储模块、按键输入以及电源管理。这些模块需要与单片机连接,因此需要确定合适的STM32型号。 用户可能希望知道具体推荐哪款STM32,并且需要详细的介绍,比如资源、外设等。考虑到用户是毕业设计,可能预算有限,同时需要足够的处理能力和外设支持。STM32系列有很多型号,需要选择性价比高且资源足够的。 首先,系统需要处理多个传感器数据,包括ADC转换(温度、湿度、有害气体、噪音)、SPI或I2C接口(传感器和存储模块)、FSMC接口驱动TFT屏幕,以及足够的GPIO控制按键、LED、蜂鸣器等。另外,使用FreeRTOS进行多任务处理,需要足够的Flash和RAM。 STM32F4系列和F1系列都是常见的选择。F4系列性能更强,适合处理复杂任务,比如FFT计算噪音,而F1系列成本更低,但可能资源紧张。需要比较两者的外设资源和成本。 接下来,需要考虑具体型号。例如,STM32F407VET6有512KB Flash,192KB RAM,多个ADC、SPI、I2C,FSMC接口,适合驱动大屏幕。而STM32F103ZET6资源较少,但价格更低。同时,是否需要USB或以太网功能?用户提到了GSM模块,可能需要串口,而USB可能用于调试或数据导出。 另外,用户可能需要考虑开发板的可用性。例如,正点原子或野火的开发板是否有对应型号,便于用户购买和调试。同时,是否需要低功耗设计?系统使用LM2596供电,可能对功耗要求不高,所以优先考虑性能。 还需要确认存储需求,AT24C02是I2C EEPROM,SD卡使用SPI或SDIO接口。如果使用SDIO,STM32F4支持SDIO,速度更快。而F1可能需要用SPI模式,速度较慢,但足够存储数据。 综合来看,STM32F4系列更适合,尤其是F407或F429,因为它们有更多的资源,支持浮点运算,适合处理传感器数据和可能的FFT运算。而如果预算有限,F103系列也可以,但可能在处理多个任务时性能吃紧。 此外,是否需要CAN或以太网?用户可能不需要,所以可以排除这些外设。需要确保所选型号有足够数量的UART(用于GSM模块、调试等),ADC通道,以及PWM输出控制LED和蜂鸣器。 最后,总结推荐的型号,详细列出其参数,并说明推荐理由,帮助用户做出选择。同时,提醒用户注意引脚分配和开发环境配置,确保顺利开发。</think>以下是针对您设计的室内环境监测系统推荐的STM32单片机型号及详细技术分析,按照性能梯度排列: --- ### **1. 主力推荐型号:STM32F407VET6** #### **核心参数** - **内核**:Cortex-M4 32位RISC(168MHz,210DMIPS) - **存储器**:512KB Flash + 192KB SRAM - **关键外设**: - 3×12位ADC(16通道,2.4MSPS)→ 同时采集4路传感器 - 4×USART → GSM模块、调试接口、备用 - 3×SPI → ILI9488屏、SD卡、备用 - 2×I2C → AT24C02、HIH-5030 - 1×FSMC → 驱动3.5寸TFT屏 - 12×定时器(含PWM输出)→ LED调光、蜂鸣器控制 #### **优势特性** - 硬件浮点单元(FPU)→ 加速噪音FFT计算 - DMA控制器 → 实现屏幕刷新与传感器采集并行 - 内置CRC校验 → 提升SD卡数据可靠性 - 工作温度:-40至+85℃ → 适应环境监测需求 #### **开发资源** - 正点原子探索者开发板(可直接驱动3.5寸屏) - 支持STM32CubeMX配置外设 - FreeRTOS内存占用约20KB(完全满足多任务需求) --- ### **2. 性价比之选:STM32F103ZET6** #### **核心参数** - **内核**:Cortex-M3 32位RISC(72MHz) - **存储器**:512KB Flash + 64KB SRAM - **关键外设**: - 3×12位ADC(21通道,1μs转换) - 5×USART → 满足多串口需求 - 2×SPI + 2×I2C - FSMC支持 → 驱动大尺寸屏幕 #### **适用场景** - 预算有限且无需复杂信号处理 - 需降低BOM成本(价格约F407的60%) - 系统响应时间要求≤1ms #### **限制条件** - 需优化FFT算法(无硬件FPU) - RAM较小 → SD卡缓存需控制在8KB以内 - 建议使用uC/OS-II替代FreeRTOS --- ### **3. 高端扩展型号:STM32H750VBT6** #### **核心参数** - **内核**:Cortex-M7 32位(480MHz,1027DMIPS) - **存储器**:128KB Flash + 1MB SRAM(支持QSPI闪存扩展) - **增强外设**: - 双精度FPU → 高精度环境建模 - 32位SDRAM接口 → 实现滑动触摸界面 - 硬件JPEG解码 → 可加载中文矢量字库 #### **推荐场景** - 需实现复杂GUI(如LVGL动态图表) - 计划扩展机器学习(如气体模式识别) - 需要连接工业级传感器(支持CAN总线) --- ### **选型对比表** | 参数 | F407VET6 | F103ZET6 | H750VBT6 | |---------------------|----------------|---------------|---------------| | **核心频率** | 168MHz | 72MHz | 480MHz | | **ADC速度** | 2.4MSPS | 1MSPS | 3.6MSPS | | **FSMC数据总线** | 16位 | 16位 | 32位 | | **PWM分辨率** | 16位 | 16位 | 32位 | | **典型功耗** | 100mA@全负载 | 50mA@全负载 | 200mA@全负载 | | **参考价格** | ¥35-45 | ¥18-25 | ¥60-75 | --- ### **系统外设分配示例(以F407VET6为例)** ```plaintext PA0-PA3 → 4x4矩阵按键行扫描 PB0-PB3 → 4x4矩阵按键列检测 PC0-PC3 → TMP117(I2C1)、HIH-5030(I2C2) PD8-PD15 → FSMC数据总线(D0-D7) PE7-PE10 → ILI9488控制信号(CS/RS/WR/RD) PF6-PF9 → SD卡(SPI2: SCK/MISO/MOSI/CS) PG11-PG14 → GSM模块(USART6: TX/RX/CTS/RTS) TIM1_CH1 → 三色LED红色通道(PWM) TIM3_CH4 → 蜂鸣器驱动 ``` --- ### **开发建议** 1. **硬件设计**: - 为ADC通道添加RC滤波(推荐10kΩ+0.1μF) - 在FSMC总线加装22Ω系列电阻防信号反射 2. **软件架构**: ```c // FreeRTOS任务划分示例 xTaskCreate(vSensorTask, "SENSOR", 512, NULL, 3, NULL); xTaskCreate(vDisplayTask, "DISPLAY", 1024, NULL, 2, NULL); xTaskCreate(vGSMTask, "GSM", 768, NULL, 4, NULL); ``` 3. **调试技巧**: - 使用STM32CubeMonitor实时观测传感器数据 - 开启DMA传输完成中断优化屏幕刷新效率 该方案推荐的单片机均可满足设计要求,建议优先选择STM32F407系列,其在性能、外设资源和开发便利性之间达到最佳平衡。实际采购时请注意选择LQFP100封装版本以确保引脚兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值