stm32倒计时秒表proteus_单片机课程设计倒计时秒表

精品文档

1

欢迎下载

一、设计目的

此次设计是我们更进一步了解基本电路的设计流程,提高自己的设计理念,

丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,

为自己今后的学习和工作打好基础,

为自己的专业技能打好基础。

通过解决实际

问题,

巩固和加深

单片机原理与应用

课程中所学的理论知识和实验能力,

本掌握单片机应用电路的一般设计方法提高电子电路的设计和实验能力,

加深对

单片机软硬知识的理解,

获得初步的应用经验以后从事生产和科研工作打下一定

的基础。

本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,

以便

今后自己在单片机领域的学习和开发打下基础,提高自己的动手能力和设计能

力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。本次设计的

重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,

同时还对单

片机的接口技术,

中断技术,

存储方式和控制方式作更深层次的了解。

掌握单片

机应用系统的软硬件设计过程、

方法及实现,

强化单片机应用电路的设计与分析

能力。提高学生在单片机应用方面的实践技能和科学作风

;

培育学

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用STM32Cube IDE写倒计时程序的基本步骤: 1. 打开STM32Cube IDE并创建一个新项目。 2. 在新项目向导中选择“STM32F1xx”系列的微控制器,并输入项目名称和存储路径。 3. 选择您的设备并配置时钟设置。 4. 添加一个定时器。 5. 配置定时器,使其每隔1秒触发一次中断。 6. 在中断处理程序中编写倒计时代码。 7. 编译、下载并运行程序。 以下是示例代码: ```c #include "main.h" #include "stm32f1xx_hal.h" /* 定义全局变量 */ TIM_HandleTypeDef htim2; uint32_t counter = 60; // 倒计时60秒 void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_TIM2_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM2_Init(); HAL_TIM_Base_Start_IT(&htim2); // 启动定时器 while (1) { /* 等待中断触发 */ } } /* 定时器中断处理程序 */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM2) { counter--; // 每秒减少1 if (counter == 0) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 倒计时结束,点亮 LED } } } /* 系统时钟配置 */ 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_SCALE1); /** Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } /* GPIO初始化 */ void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); /* 配置PA5为输出推挽模式 */ GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } /* 定时器初始化 */ void MX_TIM2_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; htim2.Instance = TIM2; htim2.Init.Prescaler = 7199; // 72MHz的时钟,分频7200,得到10KHz的时钟 htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 9999; // 计数器从0计数到9999共10K个数,即1秒 htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; if (HAL_TIM_Base_Init(&htim2) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) { Error_Handler(); } } /* 错误处理程序 */ void Error_Handler(void) { while (1) { } } ``` 在上面的代码中,我们使用了TIM2定时器,每当计数器从0递增到9999时,就会触发中断。在中断处理程序中,我们将计数器的值减1,当计数器的值为0时,点亮LED并停止倒计时。在主函数中,我们启动了定时器并等待中断触发。请注意,您需要自行添加头文件和宏定义,以便程序能够正确编译。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值