Files
Chassis/project/user/src/main.c
T
2026-06-06 21:26:08 +08:00

123 lines
4.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*********************************************************************************************************************
* MSPM0G3507 Opensource Library 即(MSPM0G3507 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
*
* 本文件是 MSPM0G3507 开源库的一部分
*
* MSPM0G3507 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅<https://www.gnu.org/licenses/>
*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
*
* 文件名称 mian
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
* 开发环境 MDK 5.37
* 适用平台 MSPM0G3507
* 店铺链接 https://seekfree.taobao.com/
********************************************************************************************************************/
#include "zf_common_headfile.h"
// 打开新的工程或者工程移动了位置务必执行以下操作
// 第一步 关闭上面所有打开的文件
// 第二步 project->clean 等待下方进度条走完
// 本例程是开源库空工程 可用作移植或者测试各类内外设
// 本例程是开源库空工程 可用作移植或者测试各类内外设
// 本例程是开源库空工程 可用作移植或者测试各类内外设
// **************************** 代码区域 ****************************
#include "Motor.h"
#include "zf_device_key.h"
#include "Task.h"
#include "IMU.h"
#include "Beep.h"
#include "GrayscaleSensor.h"
#include "MotorEncoder.h"
/*
定时器资源分配:
G0 右电机PWM
G7 左电机PWM
A0 100Hz任务
A1 50Hz任务
G6 20Hz任务
*/
/*
中断等级分配:
0 GPIOA_INT_IRQn 外部中断模拟四倍频正交编码器
1 TIMA0_INT_IRQn 100Hz任务
1 TIMA1_INT_IRQn 50Hz任务
1 UART2_INT_IRQn Command串口接收中断
7 TIMG6_INT_IRQn 20Hz任务
*/
int main (void)
{
clock_init(SYSTEM_CLOCK_80M); // 时钟配置及系统初始化<务必保留>
debug_init(); // 调试串口信息初始化
// 此处编写用户代码 例如外设初始化代码等
beep_init(50);
motor_init();
key_init(50);//按键初始化,参数为扫描周期50ms
imu_init(200);// IMU 初始化,参数为采样频率 200Hz 需要与定时器中断频率一致
imu_calibrate_gyro(); // IMU 陀螺仪零偏校准 需要在静止状态下调用
grayscale_sensor_init();//灰度传感器初始化
motor_encoder_init();//电机编码器初始化
task_init();
beep_on_time(500);//初始化完成,蜂鸣器响 500ms
// 此处编写用户代码 例如外设初始化代码等
while(1)
{
// 此处编写需要循环执行的代码
system_delay_ms(100);
char str[20] = {0};
sprintf(str,"%d,%d,%d\n", (int)(imu_angle.yaw*100),(int)(yaw_ref*100),(int)(grayscale_sensor_position*100));
debug_send_buffer((const uint8 *)str,strlen(str));
if(KEY_SHORT_PRESS == key_get_state(KEY_1))
{
while(KEY_SHORT_PRESS == key_get_state(KEY_1));
// 等待按键释放
grayscale_sensor_set_white();
beep_on_time(200);
}
else if(KEY_SHORT_PRESS == key_get_state(KEY_2))
{
while(KEY_SHORT_PRESS == key_get_state(KEY_2));
// 等待按键释放
grayscale_sensor_set_black();
beep_on_time(200);
}
else if(KEY_SHORT_PRESS == key_get_state(KEY_3))
{
while(KEY_SHORT_PRESS == key_get_state(KEY_3));
// 等待按键释放
set_yaw_ref(yaw_ref + 5.0f);
beep_on_time(200);
}
else if(KEY_SHORT_PRESS == key_get_state(KEY_4))
{
while(KEY_SHORT_PRESS == key_get_state(KEY_4));
// 等待按键释放
set_yaw_ref(yaw_ref - 5.0f);
beep_on_time(200);
}
// 此处编写需要循环执行的代码
}
}