打印
[学习笔记]

【杰发科技AC7802x测评】点灯测试|串口测试|超声波

[复制链接]
389|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenqiguang1998|  楼主 | 2023-6-29 09:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#申请开发板# #申请原创# 新品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_ */



使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

49

帖子

1

粉丝