首先我们需要有一个常用的模板template,当建立我们的项目程序时,只需要在该模板的基础上移植我们所用到的外设的程序(.c和.h文件),程序我已准备好
模板template文件
模板程序包含基本的延时(delay.c)和串口1调试(usart.c)功能,使用时直接调用对应的函数即可
在我们创建自己的项目程序时,我们根据需要,将相应的外设的驱动程序文件(.c和.h)加入到HARDWARE中,即可直接使用该外设,在main函数调用对应的函数,实现我们所需的功能。
博主已完成了大部分外设程序的编写和调试,程序包括舵机,直流电机,陀螺仪MPU6050,红外巡迹,超声波测距,陀螺仪,LCD,LED,stm32与Openmv的通信,各外设程序均带串口1调试功能
下面以陀螺仪MPU6050为例,展示如何将要用到的外设移植到template工程模板中
首先我们将外设的.c和.h文件夹复制到template的HAREWARE中
可以看到MPU6050文件夹中包含的是MPU6050这个外设的.c和.h文件,同理如果我们想用到其他外设,就将对应的外设文件夹复制到HAREWARE中,每一个外设文件夹仅包含该外设的.c和.h文件(大大方便移植)
然后我们打开template的工程文件object(在USER文件夹中)
我们需要在工程中引入刚刚加入的MPU6050的.c和.h文件:
双击HARDWARE文件夹
将MPU6050文件夹中所有的.c文件加入到工程中
点击HARDWARE可以看到已经将所有.c文件加入到工程中
我们还需要将.h文件引入到工程中
点击魔术棒
选择外设文件夹,点击确定
在main文件中引入外设所有的头文件
此时已完成外设程序的引入
int main(void)
{
float pitch,roll,yaw; //欧拉角
short aacx,aacy,aacz; //加速度传感器原始数据
short gyrox,gyroy,gyroz; //陀螺仪原始数据
short temp; //温度
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
delay_init(); //延时初始化
while(MPU_Init()!=0){} //初始化MPU6050
//让6050的DMP初始化成功才继续下去
while(mpu_dmp_init()!=0){}
while(1)
{
printf("3\r\n");
//读取数据成功才下去
while(mpu_dmp_get_data(&pitch,&roll,&yaw)!=0) {}
temp=MPU_Get_Temperature(); //得到温度值
MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度传感器数据
MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺仪数据
printf("roll:%d pitch:%d yaw:%d\r\n",(int)(roll*100),(int)(pitch*100),(int)
(yaw*10));delay_ms(400);
}
}
在main函数中,完成外设的初始化
while(MPU_Init()!=0){} //初始化MPU6050
while(mpu_dmp_init()!=0){} //DMP初始化
后面则根据需要功能,编写对应程序,这里将陀螺仪MPU6050读到的数据通过串口助手进行打印,在电脑上显示,以方便检测
由于MPU6050采用IIC通信,我们可以打开IIC文件,观看引脚分布
并且可以根据需要进行引脚的更改。
其他外设程序的移植过程类似,如有问题,可私聊,有空就解答!
补充:所有程序用STM32的标准库进行编写