依旧,使用CubeMX进行外设配置。
使用电平方式,需要进行两次捕捉,而且发送10us触发脉冲,需要延时。103VBT6的Timer不多,还是UART口方便。
硬件配置:
1)UART波特率设为9600
2)开启NVIC中断
软件:
我使用US-100测量料斗里的颗粒料消耗,项目使用Freertos系统。
1)
在main函数里启用UART2端口监听
HAL_UART_Receive_IT(&huart2, rx_data_sonic, 2);
触发模块后,它会返回2个字节的数据,这里直接读2个。
2)
在Task里每10秒触发一次,发送一个字节0x55。任务是20ms运行一次,使用一个计数。
check_interval++;
if (check_interval >= 499) {
HAL_UART_Transmit(&huart2, &command_sonic, 1, 1);
check_interval = 0;
}
3)
在中断回调函数里做计算。
料斗高度是50厘米,因此限制返回的值。譬如把料斗盖打开,测的几米的数据,扔掉不用。可不必考虑料斗打开的情况。
// 超声波数据
if (huart->Instance == USART2) {
uint16_t distance = rx_data_sonic[0]*256 + rx_data_sonic[1];
if (Q_SonicDataHandle != NULL) {
if (distance < 500) {
osMessagePut(Q_SonicDataHandle, (uint32_t)distance, 0);
}
}
HAL_UART_Receive_IT(&huart2, rx_data_sonic, 2);
}
语句末尾要再次启动串口中断监听。
关键字:stm32F1 us-100 超声波测距
引用地址:
stm32F1使用us-100超声波测距
推荐阅读最新更新时间:2024-03-16 15:38
STM32F1笔记(五)外部中断EXTI
STM32的每个IO都可以作为外部中断的中断输入口。 STM32F103的中断控制器支持19个外部中断/事件请求。每个中断设有状态为,每个中断/事件都有独立的触发和屏蔽设置。 STM32F103的19个外部中断为: EXTI线0~15:对应外部IO口的输入中断。 EXTI线16:连接到PVD输出。(Programmable Votage Detector 可编程电压监测器。连到EXTI的电源电压检测(PVD)中断) EXTI线17:连接到RTC闹钟事件。 EXTI线18:连接到USB唤醒事件。 STM32供IO口使用的中断线只有16个,而STM32的IO口远超16个。 所以STM32的GPIOx.0
[单片机]
SPI通信协议—STM32f1学习笔记
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,分别为: 1.MISO,主机数据输入从机数据输出线(“M”表示主机master,“I”表示输入in,“S”表示从机slaver,“O”表示输出out。) 2.MOSI,主机数据输出从机数据输入(同上,顺序不同而已) 3.CS,片选信号,该引脚为高的为主机,引脚低的为从机。单片机以此判断主从机。 4.SCLK。时钟线,由主机提供时钟。 主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。 SPI工作原理: 主机和从机都有一个串行移位寄存器,主机通过想它的SPI串行寄存器写入一个字节来发起一次传输。 主
[单片机]
基于51单片机超声波测距防近视台灯程序
程序代码 仿真图 单片机源程序如下: #include reg52.h #include intrins.h /*********************宏定义************************/ #define uchar unsigned char #define uint unsigned int /************位定义*****************************/ sbit Trig=P3^7; //超声波模块触发位 sbit LEDRED=P1^0; sbit LEDGREEN=P1^2; sbit speaker=P1^7; sbit person=P1^6; sbi
[单片机]
STM32F1笔记(六)独立看门狗IWDG
STM32F1内置了两个看门狗,独立看门狗IWDG和窗口看门狗WWDG,可以用来检测和解决由软件错误引起的故障。 IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。 STM32的独立看门狗由内部专门的40Khz低速时钟(LSI)驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部RC时钟,而不是准确的40Khz,而是30~60Khz之间的一个可变化的时钟,只是估算的时候以40Khz的频率来计算,看门狗对时间的要求不是很精确,所以时钟有些偏差是可以接受的。 独立看门狗的配置如下:
[单片机]
汽车倒车雷达系统的设计与实现
0 引 言
中国经济的持续增长和汽车价格的持续下降,越来越多的家庭拥有了私家车。在享受汽车给人们带来便利的同时,由于倒车而产生的问题也日益突出。据初步调查统计,15%的汽车事故是由汽车倒车“后视”不良造成的。早期的倒车防撞仪可以测试车后一定距离范围的障碍物从而发出警报,后来发展到根据距离分段报警。随着人们对汽车驾驶辅助系统易用性要求的提高,对汽车倒车雷达的要求也越来越高。本文设计的基于单片机AT89C51的倒车雷达,采用美国DAL-LAS半导体公司生产的DS18B20单总线型数字温度传感器进行温度补偿提高了测距精度,采用OC-MJ12232C_3液晶显示模块对车距进行实时显示和ISD4004语音芯片实现了倒车雷达语音报
[嵌入式]
stm32F1 DMA
DMA,全称是Direct Memory Access,中文意思为直接存储器访问 DMA可用于实现外设与存储器之间或者存储器与存储器之间数据传输的高效性 DMA请求映像 各通道的DMA1请求: 各通道的DMA2请求: DMA配置步骤 1.使能DMA控制器时钟 2.初始化DMA通道,DMA_InitTypeDef 3.使能外设DMA功能 4.开启DMA的通道 5.查询DMA传输状态 举例 u8 txBuffer = {0}; u8 rxBuffer = {0}; void DMA_send(u32 num) { DMA_Cmd(DMA1_Channel4, DISABLE); DMA_SetCur
[单片机]
STM32F1_外部SRAM作为运行内存
前言 今天总结“STM32F103 外部SRAM作为运行内存”。对于运行内存应该都知道它的意思,主要是程序运行时所使用的RAM,比如我们定义的全局变量、局部变量这些在程序运行时都会在RAM中为它们开辟一片空间,用于运行时所使用。 今天提供的工程是基于前面“TIM延时”的工程修改而来,但是今天的例子是使用ST官方提供的标准库 里面“system_stm32f10x.c”文件里面现成的函数接口(使用寄存器配置) ,使其控制外部SRAM作为运行内存。昨天的工程使用标准库fsmc相应的函数接口来配置的FSMC,昨天工程的目的就是为了使其大家熟悉参数信息。因此,今天单独再提供一个工程”FSMC读写外部SRAM_官方配置”(就是用寄存器配置
[单片机]
PB3,PB4,PA13,PA14,PA15用作普通IO口的特殊配置
最近博主用STM32F103C8T6做了一个温度测控模块,用到PB3,PB4,PA15等引脚控制外设。发现不管怎么配置,这三个引脚都不能置零。后来发现是包括这三个引脚在内的PB3,PB4,PA13,PA14,PA15是特殊的IO口,用作JTAG/SWD仿真器的调试接口。其中PA13,PA14分别作为SWD调试的SWIO和SWCLK;PB3,PB4,PA13,PA14,PA15共同用于JTAG。这五个引脚的中英文描述如下图所示,图片来源于STM32F1参考手册: 这五个IO引脚非常特殊,正常情况下作为SWJ仿真器的调试引脚,如果要作为普通IO口使用需要特别的配置。以PA13引脚为例,该引脚在STM32F1数据手册中的描述如下图
[单片机]