[其他ST产品] LED流水灯和蜂鸣器隔1s响一次

[复制链接]
765|9
 楼主| 慢醇 发表于 2023-6-29 20:01 | 显示全部楼层 |阅读模式
LED流水灯1.设置多个引脚

接着使用LED闪烁的代码

(有关使用函数的介绍和LED闪烁的代码:https://mp.csdn.net/mp_blog/creation/editor/129776176


2. 程序
  1. #include "stm32f10x.h"                  // Device header
  2. #include "Delay.h"

  3. int main()
  4. {
  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  6.         GPIO_InitTypeDef GPIO_InitStructure;
  7.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  8.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
  9.         //也可以这么写GPIO_Pin_0|GPIO_Pin_0|GPIO_Pin_0....;
  10.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  11.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  12.         while(1)
  13.         {
  14.                 GPIO_Write(GPIOA,~0x0001);
  15.                 //因为是低电平点亮,所以加一个取反符号.这样就是第一个灯亮
  16.                 Delay_ms(500);
  17.                 //Delay.c文件在LED闪烁中有就不再写了
  18.                 GPIO_Write(GPIOA,~0x0002);
  19.                 Delay_ms(500);
  20.                 GPIO_Write(GPIOA,~0x0004);
  21.                 Delay_ms(500);
  22.                 GPIO_Write(GPIOA,~0x0008);
  23.                 Delay_ms(500);
  24.                 GPIO_Write(GPIOA,~0x0010);
  25.                 Delay_ms(500);
  26.                 GPIO_Write(GPIOA,~0x0020);
  27.                 Delay_ms(500);
  28.                 GPIO_Write(GPIOA,~0x0040);
  29.                 Delay_ms(500);
  30.                 GPIO_Write(GPIOA,~0x0080);
  31.                 Delay_ms(500);
  32.         }
  33. }
转换为二进制
0x00001---->0000 0000 0000 0001
0x00002---->0000 0000 0000 0010
0x00004---->0000 0000 0000 0100
0x00008---->0000 0000 0000 1000
0x00010---->0000 0000 0001 0000
0x00020---->0000 0000 0010 0000
0x00040---->0000 0000 0100 0000
0x00080---->0000 0000 1000 0000



 楼主| 慢醇 发表于 2023-6-29 20:01 | 显示全部楼层
现象
53564649d728dec4b9.png

VID_20230331_162555
 楼主| 慢醇 发表于 2023-6-29 20:02 | 显示全部楼层
蜂鸣器隔1s响一次
1.接插线板
蜂鸣器的VCC接在正极供电孔,GND接在负极供电孔,I/O口接哪都行(我接在PB12上),但是要注意有几个口不能接,就比如不要接在A15、B3、B4,这几个口默认是JTAG的调试端口,如果要做普通端口的话,要进行配置。
 楼主| 慢醇 发表于 2023-6-29 20:02 | 显示全部楼层
2.写程序
先是时钟,因为用PB口,所以开头改为RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO, ENABLE);

端口写为PB12(因为我连的是PB12),输出低电平,蜂鸣器会响,输出高电平,就不响。

(Delay在https://mp.csdn.net/mp_blog/creation/editor/129776176)
 楼主| 慢醇 发表于 2023-6-29 20:03 | 显示全部楼层
  1. #include "stm32f10x.h"                  // Device header
  2. #include "Delay.h"

  3. int main()
  4. {
  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  6.         GPIO_InitTypeDef GPIO_InitStructure;
  7.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  8.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
  9.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  10.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  11.         while(1)
  12.         {
  13.                 GPIO_ResetBits(GPIOB,GPIO_Pin_12);
  14.                 Delay_ms(1000);
  15.                 GPIO_SetBits(GPIOB,GPIO_Pin_12);
  16.                 Delay_ms(1000);

  17.         }
  18. }

星辰大海不退缩 发表于 2023-6-30 09:27 | 显示全部楼层
楼主,用的是标准库写的,HAL库是不是比标准库更简单
Undshing 发表于 2023-7-1 23:09 | 显示全部楼层
星辰大海不退缩 发表于 2023-6-30 09:27
楼主,用的是标准库写的,HAL库是不是比标准库更简单

hal库的抽象程度更高
AloneKaven 发表于 2023-7-5 21:38 | 显示全部楼层
标准库更接近底层,更方便理解工作原理
 楼主| 慢醇 发表于 2024-3-18 15:23 | 显示全部楼层
AL库通常被设计为更加高层次的接口,旨在提供简化的硬件访问接口,使开发人员可以更容易地与硬件进行交互。因此,使用HAL库可能会更简单,特别是对于初学者来说。
标准库通常提供更底层的硬件访问接口,需要开发人员对硬件的细节有更深入的了解。因此,使用标准库可能需要更多的学习和了解,但也更灵活。
小夏天的大西瓜 发表于 2024-3-18 17:27 | 显示全部楼层
HAL库通常被设计为更加高层次的接口,旨在提供简化的硬件访问接口,使开发人员可以更容易地与硬件进行交互。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

134

主题

1382

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部