基于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的超声波模块开发相关推荐

  1. 基于STM32和超声波模块的超声波测距,使用OLED显示距离和温度(附详细源代码)

    1. HC-SR04模块介绍 HC-SR04模块优势 此模块性能稳定,测度距离精确,模块高精度,盲区小. 产品应用领域: 1.机器人避障 2.物体测距 3.液位检测 4.公共安防 5.停车场检测 超声 ...

  2. 基于stm32f10x的超声波模块HC-SR04的测距示例,并用串口将数据打印出来

    一.所需材料: 1任何一种型号的stm32f10x的微控制器 2.HC-SR04模块 3.安装串口驱动与串口助手(这里用的火哥的串口调试助手) 4.ST-link或者串口等下载方式都可以 二.超声波原 ...

  3. 基于GD32开发板的GPS定位模块的使用操作

    基于上一章的介绍,本章将介绍如何基于gd32开发板使用gps定位模块. 一.官方代码分析 正点原子的官方测试例程,测试代码的逻辑还是比较简单的,主要就是先调用函数atk_mo1218_init()进行 ...

  4. 基于Arduino UNO开发板,超声波模块,直流电机,实现电机驱动

    这:是我的手机,一台能无线充电的华为Mate 30Pro 4G 这:是我的的无线充电器,(虽然速度低,毕竟店家送的) 这是我维持一年多的充电样子,为什么这么做呢......因为无线充电会发烫,毕竟无线 ...

  5. 基于GD32实现CS5530电子秤称重方案及驱动

    1. 概述   CS5530是24 位带有超低噪声放大器的模拟数字转换器,配合压力传感器可以实现高精度的称重(电子秤)方案,本博文将从称重传感器实现原理到如何次采用CS5530实现电子秤称重方案进行详 ...

  6. 基于STM32F103ZET6 HC_SR04超声波测距模块

    这是最后的实验现象,改变不同的角度即可测得距离 板子 PZ6806L 超声波模块 HC_SR04 HC_SR04模块讲解 通过该超声波模块说明书,可明白供电需VCC 5V  还需GND  ECHO(回 ...

  7. 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(2)

    群里一直有朋友在问如何构建基于ASP.NET 2.0的DNN 4.X模块开发环境,受原来ASP.NET1.1多工程机制的思维影响,大家一直在等待VS2005支持多工程,经过一段时间的学习和摸索,发现其 ...

  8. STM32 四轴无人机的设计——基于HCSR04超声波模块的距离检测与警报设计

    1.系列总述 从现在开始将会进入四轴无人机的制作,我是第一次制作四旋翼,从前没有接触过这个方面,手边的参考资料只有一本四轴的设计书和正点原子F405飞控的源码,所以代码逻辑设计方面肯定有所欠缺,大家可 ...

  9. 超声波模块STM32F1X开发

    一.使用的超声波型号 1.1 型号: AJ-SRO4M-T-X 1.2 产品概述 AJ-SR04M- T-X超声波测距模块,是采用收发一体的防水带线探头,运用 非接触试超声波探测技术设计而成.产品在2 ...

最新文章

  1. Android中个人推崇的数据库使用方式
  2. sql服务器时间不正确,SQL Server 服务器本地时间更改对SQL Server本身的影响
  3. 粉色温馨——HTML框架示例
  4. JLabel跟label
  5. python如何关闭窗口仍能运行_Python在退出时关闭自己的CMD shell窗口
  6. c++ 读文件_第十六节:读文件,文件的创建,写文件,文件的读写以及鼠标键盘事件和图形绘制...
  7. php 异常错误信息用处,关于PHP中异常错误的处理详细介绍
  8. 如何给APP开发属于自己的小程序
  9. WiresharkTCP的状态 (SYN, FIN, ACK, PSH, RST, URG)
  10. python二维数组读取数报错TypeError: list indices must be integers or slices, not tuple
  11. 齐次坐标和单应性矩阵
  12. 配置sharepoint站点为Form认证(下)
  13. 试题库管理系统毕业设计(毕业论文完整版从目录到总结)
  14. 打印没反应/打印耗时长/not accessible
  15. 【Linux】工具(3)——gcc/g++
  16. 【Linux】linux 查看服务器配置:核数和内存
  17. 71外链论坛_免费发外链平台
  18. 浩辰CAD看图王中如何一键替换CAD图纸中大量相同的文字?
  19. 2023第一届机器人与软件工程前沿国际会议
  20. NORDAC诺德变频器维修SK520E-750-340-A及故障代码

热门文章

  1. qt data和setData
  2. 安装CTeX后Texworks不能读写.eps图片?
  3. 蓝牙技术|蓝牙BLE和蓝牙Mesh的关系
  4. 【华为OD机试c++/java/python 真题2023 Q1】
  5. 网络流量异常检测综述
  6. 杀毒软件的查杀病毒的原理以及木马、病毒的免杀伎俩(论杀或者不杀 )
  7. 原生JS多线程解决方案:Worker
  8. STM32之RTC时钟
  9. 【快速统计面积周长】封闭图形快速面积求和CAD插件【LSP】
  10. css3发光字js特效代码