#申请开发板# #申请原创# 新品AC7802x开发板尝鲜测试
一、编译环境搭建
1、MDK5 开发环境安装,我的开发环境是5.37。MDK5 安装包可以从keil 官网下载;
2、进行AutoChips.AC7802x_DFP.1.0.0.pack 驱动包安装,下载链接如下:
https://www.autochips.com/uploads/file/20230515/2023051513170052.rar
以上安装好后就可以进行开发了!
点灯与串口测试
在官方提供的资料中,已经有点灯和串口的历程了(例程下载中,只是我解压在了外面,好规避中文路径)
进行开发板连接
我使用的是SWD烧录器,当然wch-link、dap-link这些淘宝便宜的也完全可以胜任啦,直接将接口插入末端插槽即可。
烧录示例:点灯测试代码【01_GPIO_Basic】
烧录成功后,灯光开始闪烁。
烧录示例:串口测试代码【01_UART_Polling】
在输入框输入“123”,发送后,在接收框可以看到返回打印;
超声波测距部分代码
1、实现文件
#include "string.h"
#include "ac780x_timer.h"
#include "ac780x_timer_reg.h"
#include "ac780x_gpio.h"
#include "HCSR04.h"
uint64_t time = 0;//声明变量,用来计时
uint64_t time_end = 0;//声明变量,存储回波信号时间
void Timer0_Init ( void )
{
TIMER_ConfigType timerConfig0;
memset ( &timerConfig0, 0, sizeof ( timerConfig0 ) );
/* TIMER0配置函数 */
timerConfig0.periodValue = Delay10ms; /*! 10ms计时 */
timerConfig0.interruptEn = DISABLE; /*! 禁能定时器中断 */
timerConfig0.linkModeEn = DISABLE; /*! 禁能链接模式 */
timerConfig0.timerEn = DISABLE; /*! 先关掉定时器,以使得计时时间更精确,具体位置在GPIO中断处理函数中 */
timerConfig0.callBack = NULL; /*! 回调函数为空 */
TIMER_Init ( TIMER_CHANNEL0, &timerConfig0 ); /*! TIMER初始化函数生效 */
mdelay ( 10 ); /*! 防止在定时器溢出后产生误差 */
}
uint32_t sonar_mm ()//测距并返回单位为毫米的距离结果
{
uint32_t Distance, Distance_mm = 0;//返回测距结果
TRIG_ON;//输出高电平
mdelay ( 15 );//延时15微秒
TRIG_OFF;//输出低电平
TIMER_SetChannel ( TIMER_CHANNEL0, ENABLE );
while ( GET_ECHO_STS == FALSE );//等待低电平结束
time = TIMER_GetCurrentValue ( TIMER_CHANNEL0 );//计时清零
while ( GET_ECHO_STS == TRUE );//等待高电平结束
TIMER_SetChannel ( TIMER_CHANNEL0, DISABLE ); /*!此处关闭定时器 */
time_end = TIMER_GetCurrentValue ( TIMER_CHANNEL0 );
time_end = time_end - time; //记录结束时的时间
if ( time_end / 100 < 38 )//判断是否小于38毫秒,大于38毫秒的就是超时,直接调到下面返回0
{
Distance = ( time_end * 346 ) / 2;//计算距离,25°C空气中的音速为346m/s
Distance_mm = Distance / 100;//因为上面的time_end的单位是10微秒,所以要得出单位为毫米的距离结果,还得除以100
}
return Distance_mm;
}
void gpio_init ( void )
{
GPIO_SetFunc ( TRIG_PORT, TRIG_PIN, GPIO_FUN0 );
GPIO_SetFunc ( ECHO_PORT, ECHO_PIN, GPIO_FUN0 );
GPIO_SetDir ( TRIG_PORT, TRIG_PIN, GPIO_OUT );
GPIO_SetDir ( ECHO_PORT, ECHO_PIN, GPIO_IN );
GPIO_SetPulldown ( ECHO_PORT, ECHO_PIN, ENABLE );
}
uint32_t HC_SR04_READ ( void )
{
gpio_init();
Timer0_Init();
return sonar_mm ();
}
头文件
#ifndef HCSR04_H_
#define HCSR04_H_
#ifdef __cplusplus
extern "C" {
#endif /*__cplusplus */
/* =========================================== Includes =========================================== */
#include "stdio.h"
#include "stdint.h"
/* ============================================ Define ============================================ */
#define Timer_CLK (APB_BUS_FREQ) /*! 定义定时器时钟为APB */
#define DelayS(n) (Timer_CLK*n-1) /*! n 秒超时值 */
#define Delay1ms (Timer_CLK/1000-1) /*! 1ms超时值 */
#define Delay10ms (Timer_CLK/100-1) /*! 10ms超时值 */
/* =========================================== Typedef ============================================ */
/* ========================================== Variables =========================================== */
/* ==================================== Functions declaration ===================================== */
void Timer0_Init ( void );
uint32_t sonar_mm (void);
void gpio_init ( void );
uint32_t HC_SR04_READ ( void );
/* ====================================== Functions define ======================================== */
#define TRIG_PORT (GPIOA)
#define TRIG_PIN (GPIO_PIN2)
#define ECHO_PORT (GPIOA)
#define ECHO_PIN (GPIO_PIN3)
#define TRIG_ON do{GPIO_SetPinLevel(TRIG_PORT, TRIG_PIN, GPIO_LEVEL_HIGH);}while(0)
#define TRIG_OFF do{GPIO_SetPinLevel(TRIG_PORT, TRIG_PIN, GPIO_LEVEL_LOW);}while(0)
#define GET_ECHO_STS (GPIO_GetPinLevel(ECHO_PORT, ECHO_PIN))
#ifdef __cplusplus
}
#endif /*__cplusplus */
#endif /* HCSR04_H_ */
|