打印
[STM32F1]

流水灯还有人会写吗?

[复制链接]
308|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小明的同学|  楼主 | 2023-3-23 15:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "stm32f1xx_hal.h"

#define LED_PIN GPIO_PIN_13
#define LED_GPIO_PORT GPIOC

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

int main(void)
{
  HAL_Init();  // 初始化HAL库

  SystemClock_Config();  // 配置系统时钟

  MX_GPIO_Init();  // 配置GPIO

  while (1)
  {
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN);  // 翻转LED
    HAL_Delay(500);  // 延时500ms
  }
}

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

  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.HSIState = RCC_HSI_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();
  }

  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();
  }
}

static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  __HAL_RCC_GPIOC_CLK_ENABLE();

  GPIO_InitStruct.Pin = LED_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
}

void Error_Handler(void)
{
  // 错误处理函数,可以在此处添加代码处理错误
}

#ifdef  USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
  // 断言失败处理函数,可以在此处添加代码处理错误
}
#endif /* USE_FULL_ASSERT */
在此代码中,我们使用了HAL库函数来控制LED灯的亮灭。具体地,我们定义了LED灯的引脚号和端口号,然后在主循环中不断翻转LED灯的状态,同时延时500ms。

该程序的基本流程如下:

初始化HAL库

配置系统时钟

配置GPIO

进入主循环

在主循环中翻转LED灯状态,并延时500ms

注意,在程序中还需要定义和实现错误处理的函数。如果出现错误,可以在 Error_Handler() 函数中添加代码来进行处理。在这个示例代码中,我们只是简单地定义了 Error_Handler() 函数,但是在实际的应用中,你可能需要根据具体的情况来实现该函数,以便更好地处理错误。另外,还有一个可选的函数 assert_failed(),用于处理断言失败的情况,也可以根据具体需要进行定义和实现。


使用特权

评论回复
沙发
小明的同学|  楼主 | 2023-3-23 15:47 | 只看该作者
需要注意的是,对于不同的STM32芯片,可能需要使用不同的HAL库函数,或者需要进行不同的配置。在编写代码时,一定要仔细查阅相关的资料,以确保代码的正确性。

使用特权

评论回复
板凳
AloneKaven| | 2023-3-23 22:35 | 只看该作者
哈哈,确实已经很久不写流水灯了

使用特权

评论回复
地板
Clyde011| | 2024-4-22 07:32 | 只看该作者

环氧树脂、聚胺脂、有机硅灌封胶

使用特权

评论回复
5
万图| | 2024-4-22 09:28 | 只看该作者

保护被保护IC或线路

使用特权

评论回复
6
Uriah| | 2024-4-22 10:31 | 只看该作者

电源模块的灌封用的胶是可以根据需求而调制的

使用特权

评论回复
7
帛灿灿| | 2024-4-22 12:27 | 只看该作者

所以不会通过地损耗

使用特权

评论回复
8
Bblythe| | 2024-4-22 13:30 | 只看该作者

相当于积分,用于滤波

使用特权

评论回复
9
Pulitzer| | 2024-4-22 16:29 | 只看该作者

使该元器件不超过正常值范围

使用特权

评论回复
10
Wordsworth| | 2024-4-22 19:28 | 只看该作者

ESD静电保护器工作特性与TVS管一致。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

1392

帖子

2

粉丝