[STM32F1] 基于STM32F103C8T6的振动器控制继电器实现控制灯的亮灭

[复制链接]
3235|64
 楼主| lmq0v9 发表于 2023-3-28 14:23 | 显示全部楼层
20.如图配置
23352642287b77c19c.png
 楼主| lmq0v9 发表于 2023-3-28 14:24 | 显示全部楼层
21.打开gpio.h,配置GPIO的输出模式为推挽输出。
46787642288164b7c9.png
 楼主| lmq0v9 发表于 2023-3-28 14:25 | 显示全部楼层
22.配置GPIOA 的速度为10Mhz。
522016422884b7f54c.png
 楼主| lmq0v9 发表于 2023-3-28 14:25 | 显示全部楼层
23.将GPIOA的pin口调为3。
436296422886f39ddd.png
 楼主| lmq0v9 发表于 2023-3-28 14:28 | 显示全部楼层
24.将配置好的结构体进行编译。
6718364228887e7ac7.png
 楼主| lmq0v9 发表于 2023-3-28 14:29 | 显示全部楼层
25.打开gpio.h文件,复制GPIOA的初始化函数。
334486422895972373.png
 楼主| lmq0v9 发表于 2023-3-28 14:30 | 显示全部楼层
27.将初始化函数配置为GPIOA时钟及结构体地址。
515936422896a429de.png
 楼主| lmq0v9 发表于 2023-3-28 14:32 | 显示全部楼层
28.在shake.c文件中对震动传感器寄存器配置框架。
272686422899de5c91.png
 楼主| lmq0v9 发表于 2023-3-28 14:34 | 显示全部楼层
29.z在外设文件FWLIB->rcc.c->rcc.h->调用ABP2周期时钟(复制)。
5173464228a2a44073.png
 楼主| lmq0v9 发表于 2023-3-28 14:42 | 显示全部楼层
30.将ABP2周期时钟粘贴在shake.c中。
5688464228a8ef105f.png
 楼主| lmq0v9 发表于 2023-3-28 14:49 | 显示全部楼层
31.将GPIOA 时钟配置完成,编译。

9432864228e00516c7.png
 楼主| lmq0v9 发表于 2023-3-28 14:50 | 显示全部楼层
32.结构体初始化。
8700764228e0e9dacc.png
 楼主| lmq0v9 发表于 2023-3-28 15:16 | 显示全部楼层
33.配置好的结构体,注意将输出配置为下拉输出(IPD)
1828064228e359793c.png
 楼主| lmq0v9 发表于 2023-3-28 15:27 | 显示全部楼层
在主函数中添加延时函数。
7829642296f93951f.png
 楼主| lmq0v9 发表于 2023-3-28 15:30 | 显示全部楼层
如图,在主函数中将继电器电平拉高。
5767464229705e607a.png
 楼主| lmq0v9 发表于 2023-3-28 15:30 | 显示全部楼层
配置震动传感器与继电器结合使用控制的灯的开关。
62603642297943cc91.png
 楼主| lmq0v9 发表于 2023-3-28 15:41 | 显示全部楼层
将程序烧录进单片机中。
7965642297b817a52.png
 楼主| lmq0v9 发表于 2023-3-28 15:43 | 显示全部楼层
四、编程代码

relay.c

  1. #include "stm32f10x.h"
  2. #include "relay.h"

  3. void Relay_Init(void)
  4. {
  5.        
  6.           GPIO_InitTypeDef relay_init;  //½á¹¹Ìå³õʼ»¯

  7.    //1.µ÷ÓÃGPIOAʱÖÓ
  8.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  9.          
  10.          //2.GPIOA3½á¹¹ÌåÅäÖÃ
  11.           relay_init.GPIO_Mode   =  GPIO_Mode_Out_PP; //Êä³öģʽ
  12.           relay_init.GPIO_Pin    =  GPIO_Pin_3;       //Êä³öPIN¿Ú
  13.           relay_init.GPIO_Speed  =  GPIO_Speed_10MHz ;//Êä³öËÙ¶È
  14.           
  15.           GPIO_Init(GPIOA,&relay_init );  //GPIOA³õʼ»¯º¯Êý
  16.           
  17.        
  18. }


 楼主| lmq0v9 发表于 2023-3-28 15:44 | 显示全部楼层
relay.h
  1. #include "stm32f10x.h"

  2. void Relay_Init(void);



 楼主| lmq0v9 发表于 2023-3-28 15:48 | 显示全部楼层
shake.c
  1. #include "stm32f10x.h"
  2. #include "shake.h"

  3. void Shake_Init(void)
  4. {
  5.       GPIO_InitTypeDef shake_init;//½á¹¹Ìå³õʼ»¯
  6.        
  7.          // 1.ÅäÖÃGPIOAʱÖÓ
  8.             RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  9.        
  10.        
  11.          // 2.½á¹¹ÌåÅäÖÃ
  12.             shake_init.GPIO_Mode   =  GPIO_Mode_IPD;   //ÅäÖÃÊä³ö£¬ÏÂÀ­ÊäÈë
  13.             shake_init.GPIO_Pin    =  GPIO_Pin_2;      //ÅäÖÃpin¿Ú
  14.             shake_init.GPIO_Speed  =  GPIO_Speed_10MHz;//ÅäÖÃËÙ¶È
  15.        
  16.             GPIO_Init(GPIOA,&shake_init);              //GPIOAʱÖÓ³õʼ»¯
  17.             

  18. }




您需要登录后才可以回帖 登录 | 注册

本版积分规则

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