【GD32使用】基于GD32的超声波模块开发
基于GD32的超声波模块开发
代码见下:
首先初始化引脚接口,利用PA11作为Triger触发脚,PB12作为Echo脚。
(注意如果采集到的超声波信号一直为0,请检查触发脉宽是否大于10us,另外驱动电压vcc和Echo引脚的响应信号的电压均为5V,使用的时候要避免直接与IO口进行连接(GD32引脚最大电压为3.6V!!!!!))
rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_clock_enable(RCU_GPIOB);gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_11);gpio_init(GPIOB,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,GPIO_PIN_12);gpio_bit_reset(GPIOA,GPIO_PIN_11);gpio_bit_reset(GPIOB,GPIO_PIN_12);
本例中使用TImer1作为计数时钟,初始化Timer1。由于数据处理是在中断中进行的,因此也要初始化中断。
timer_oc_parameter_struct timer_ocintpara;timer_parameter_struct timer_initpara;//初始化中断NVIC_SetPriorityGrouping(NVIC_PRIGROUP_PRE4_SUB0);nvic_irq_enable(EXTI10_15_IRQn,4,0);gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB,GPIO_PIN_SOURCE_12);exti_init(EXTI_12,EXTI_INTERRUPT,EXTI_TRIG_RISING);exti_interrupt_flag_clear(EXTI_12);//定时器1初始化rcu_periph_clock_enable(RCU_TIMER1);timer_deinit(TIMER1);/* TIMER1 configuration *///1us进行一次计数timer_initpara.prescaler = 119;timer_initpara.alignedmode = TIMER_COUNTER_EDGE;timer_initpara.counterdirection = TIMER_COUNTER_UP;timer_initpara.period = 65535;timer_initpara.clockdivision = TIMER_CKDIV_DIV1;timer_initpara.repetitioncounter = 0;timer_init(TIMER1,&timer_initpara);
定义产生触发信号的函数
void Triger(void)
{uint32_t count=0;gpio_bit_set(GPIOA,GPIO_PIN_11);for(count=0;count<800;count++);//产生一个大于10us的脉冲,这里的800是用示波器测出来的。gpio_bit_reset(GPIOA,GPIO_PIN_11);}
最后在中断中对数据进行处理输出即可
/*!\brief Timer1 Interrupt handler\param[in] none\param[out] none\retval none
*/
void Timer1_EXTI_IRQHandler(void)
{uint32_t lastCount=0;if(RESET!=exti_interrupt_flag_get(EXTI_12))//发生超声波中断{//先将定时器进行初始化,设置计数寄存器为0timer_counter_value_config(TIMER1,0);timer_enable(TIMER1);while(gpio_input_bit_get(GPIOB,GPIO_PIN_12)==1);lastCount=timer_counter_read(TIMER1);printf("get trigger !!value = %d cm\n",(lastCount*34/2000));timer_disable(TIMER1);exti_interrupt_flag_clear(EXTI_12);}}
下面程序是初始化串口的代码,作为开发参考。
usart.c
#include "MiniSys_usart.h"/*!\brief USART initialize function\param[in] none\param[out] none\retval none
*/
void MiniSys_USART_Init(void)
{/* enable GPIO clock */rcu_periph_clock_enable(RCU_GPIOB);/* enable USART clock */rcu_periph_clock_enable(RCU_USART0);/* connect port to USART0_TX */gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_6);/* connnect port to USART0_RX */gpio_init(GPIOB,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,GPIO_PIN_7);/* remap config */gpio_pin_remap_config(GPIO_USART0_REMAP,ENABLE);/*usart configure */usart_deinit(USART0);usart_baudrate_set(USART0,115200U);usart_receive_config(USART0,USART_RECEIVE_ENABLE);usart_transmit_config(USART0,USART_TRANSMIT_ENABLE);usart_enable(USART0);
}/*!\brief retarget the C library printf function to the USART\param[in] none\param[out] none\retval none
*/
int fputc(int ch, FILE *f)
{usart_data_transmit(USART0, (uint8_t)ch);while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));return ch;
}
【GD32使用】基于GD32的超声波模块开发相关推荐
- 基于STM32和超声波模块的超声波测距,使用OLED显示距离和温度(附详细源代码)
1. HC-SR04模块介绍 HC-SR04模块优势 此模块性能稳定,测度距离精确,模块高精度,盲区小. 产品应用领域: 1.机器人避障 2.物体测距 3.液位检测 4.公共安防 5.停车场检测 超声 ...
- 基于stm32f10x的超声波模块HC-SR04的测距示例,并用串口将数据打印出来
一.所需材料: 1任何一种型号的stm32f10x的微控制器 2.HC-SR04模块 3.安装串口驱动与串口助手(这里用的火哥的串口调试助手) 4.ST-link或者串口等下载方式都可以 二.超声波原 ...
- 基于GD32开发板的GPS定位模块的使用操作
基于上一章的介绍,本章将介绍如何基于gd32开发板使用gps定位模块. 一.官方代码分析 正点原子的官方测试例程,测试代码的逻辑还是比较简单的,主要就是先调用函数atk_mo1218_init()进行 ...
- 基于Arduino UNO开发板,超声波模块,直流电机,实现电机驱动
这:是我的手机,一台能无线充电的华为Mate 30Pro 4G 这:是我的的无线充电器,(虽然速度低,毕竟店家送的) 这是我维持一年多的充电样子,为什么这么做呢......因为无线充电会发烫,毕竟无线 ...
- 基于GD32实现CS5530电子秤称重方案及驱动
1. 概述 CS5530是24 位带有超低噪声放大器的模拟数字转换器,配合压力传感器可以实现高精度的称重(电子秤)方案,本博文将从称重传感器实现原理到如何次采用CS5530实现电子秤称重方案进行详 ...
- 基于STM32F103ZET6 HC_SR04超声波测距模块
这是最后的实验现象,改变不同的角度即可测得距离 板子 PZ6806L 超声波模块 HC_SR04 HC_SR04模块讲解 通过该超声波模块说明书,可明白供电需VCC 5V 还需GND ECHO(回 ...
- 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(2)
群里一直有朋友在问如何构建基于ASP.NET 2.0的DNN 4.X模块开发环境,受原来ASP.NET1.1多工程机制的思维影响,大家一直在等待VS2005支持多工程,经过一段时间的学习和摸索,发现其 ...
- STM32 四轴无人机的设计——基于HCSR04超声波模块的距离检测与警报设计
1.系列总述 从现在开始将会进入四轴无人机的制作,我是第一次制作四旋翼,从前没有接触过这个方面,手边的参考资料只有一本四轴的设计书和正点原子F405飞控的源码,所以代码逻辑设计方面肯定有所欠缺,大家可 ...
- 超声波模块STM32F1X开发
一.使用的超声波型号 1.1 型号: AJ-SRO4M-T-X 1.2 产品概述 AJ-SR04M- T-X超声波测距模块,是采用收发一体的防水带线探头,运用 非接触试超声波探测技术设计而成.产品在2 ...
最新文章
- Android中个人推崇的数据库使用方式
- sql服务器时间不正确,SQL Server 服务器本地时间更改对SQL Server本身的影响
- 粉色温馨——HTML框架示例
- JLabel跟label
- python如何关闭窗口仍能运行_Python在退出时关闭自己的CMD shell窗口
- c++ 读文件_第十六节:读文件,文件的创建,写文件,文件的读写以及鼠标键盘事件和图形绘制...
- php 异常错误信息用处,关于PHP中异常错误的处理详细介绍
- 如何给APP开发属于自己的小程序
- WiresharkTCP的状态 (SYN, FIN, ACK, PSH, RST, URG)
- python二维数组读取数报错TypeError: list indices must be integers or slices, not tuple
- 齐次坐标和单应性矩阵
- 配置sharepoint站点为Form认证(下)
- 试题库管理系统毕业设计(毕业论文完整版从目录到总结)
- 打印没反应/打印耗时长/not accessible
- 【Linux】工具(3)——gcc/g++
- 【Linux】linux 查看服务器配置:核数和内存
- 71外链论坛_免费发外链平台
- 浩辰CAD看图王中如何一键替换CAD图纸中大量相同的文字?
- 2023第一届机器人与软件工程前沿国际会议
- NORDAC诺德变频器维修SK520E-750-340-A及故障代码