先看电路图,知道怎么动
??当遇到需要通过程序控制实际硬件的时候,首先我们需要从硬件原理图(电路图)开始,找到需要控制的硬件,看看引脚和电路结构分析一下要如何启动。举个例子:
电路分析
??图中三极管是起到一个开关的作用,通过三极管的饱和或截止来控制M-是否接地形成闭合回路。因此当MTO-CTL(马达控制的英文简写)是高电平时马达开始震动。
画一个控制流程图
Created with Rapha?l 2.3.0
开始
初始化
开始震动
延时ms
停止震动
结束
??初始化是大部分程序的开始,然后震动和控制震动的时间最后停止震动。
建立.C文件和.H文件
??随便用什么建立2个文件,如mot-vib.c和mot-vib.h。为什么要建立2个文件?因为一般来说函数写在.c文件中,而函数名是在.h文件中声明,需要使用函数时就包含.h文件,也就是:
#include "mot-vib.h"
??文件建好后,就开始在.c文件中写代码。
#include<stdio.h>
#include "lxl_gpio_all_init.h"
#include "Motor_vibration.h"
#include "gpio.h"
#include "clock.h"
#include "mot-vib.h"
void Motor_Vib_init_func(){
#if 1
hal_gpio_fmux(MY_GPIO_MOTO_ENABLE,Bit_ENABLE);
hal_gpioretention_register(MY_GPIO_MOTO_ENABLE);
hal_gpio_pin_init(MY_GPIO_MOTO_ENABLE,GPIO_OUTPUT);
hal_gpio_fast_write(MY_GPIO_MOTO_ENABLE,0);
#endif
}
void Motor_Vib(uint32_t time){
Motor_Vib_init_func();
hal_gpio_fast_write(MY_GPIO_MOTO_ENABLE,1);
WaitMs(time);
hal_gpio_fast_write(MY_GPIO_MOTO_ENABLE,0);
}
??然后开始写.h文件的代码这个主要是声明一下函数。
#ifndef __MOTOT_VIBRATION_H__
#define __MOTOT_VIBRATION_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "clock.h"
void Motor_Vib_init_func();
void Motor_Vib(uint32_t time);
#ifdef __cplusplus
}
#endif
#endif
??开头的两行是为了避免声明冲突,紧接着的3行是为了方便c++使用者调用时不会出错,中间的3行才是这个.h文件的核心–声明函数名。
在main.c中调用
??在mian.c中include 对应的.h文件然后调用,最后烧录验证。
|