热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【火牛STM32F103VC】RTThread蜂鸣器BEEP功能验证

开发环境Win1064位KeilMDK5【火牛开发板STM32F103VCT6】USB转串口线(CH340),这里使用RS232的串口&

开发环境


  • Win10 64位
  • Keil MDK5
  • 【火牛开发板 STM32F103VCT6】
  • USB 转串口线(CH340),这里使用RS232的串口,注意区分 TTL电平的
  • 5V 直流电源,用于给开发板【牛角座】供电,当然可以使用USB线供电
  • J-Link V9,用于调试与下载程序

蜂鸣器


  • 开发板上有一个蜂鸣器,这个是【直流】型的,也就是通电就发出声音
  • 使用引脚控制,控制GPIO引脚的高低输出即可
  • 查看原理图:使用的是PB5

在这里插入图片描述
在这里插入图片描述

  • 注意有个排针跳线,需要使用【跳线帽】短接 JP5的 1、2,这样GPIO 的引脚PB5,才能控制BEEP的导通与关闭

测试程序


  • 这里使用RT-Thread,环境搭建可以参考

  • 【火牛STM32F103VC】RT-Thread 开发测试环境搭建

  • beep.c

#include "beep.h"
#include "board.h"
#include void beep_gpio_init(void)
{/* set BEEP pin mode to output */rt_pin_mode(BEEP_PIN, PIN_MODE_OUTPUT);rt_pin_write(BEEP_PIN, PIN_LOW);rt_kprintf("%s : beep init\r\n", __func__);
}void beep_power_on(rt_uint8_t bon)
{if (bon == 0x00){rt_kprintf("%s : beep off\r\n", __func__);rt_pin_write(BEEP_PIN, PIN_LOW);}else{rt_kprintf("%s : beep on\r\n", __func__);rt_pin_write(BEEP_PIN, PIN_HIGH);}
}void beep_test(int argc, char **argv)
{if (argc < 2){beep_power_on(0x01);rt_thread_mdelay(200);beep_power_on(0x00);}else{int beep_cnt &#61; atoi(argv[1]);while (beep_cnt > 0){beep_power_on(0x01);rt_thread_mdelay(50);beep_power_on(0x00);rt_thread_mdelay(80);beep_cnt--;}}
}/* 导出 串口 shell 命令 */
MSH_CMD_EXPORT(beep_test, beep_test);

  • beep.h

#ifndef __BEEP_H__
#define __BEEP_H__#include /* defined the BEEP pin: PB5 */
#define BEEP_PIN GET_PIN(B, 5)void beep_gpio_init(void);
void beep_power_on(rt_uint8_t bon);#endif

  • 在 main 函数&#xff08;main 线程&#xff09;中调用 beep_gpio_init() 初始化 BEEP的控制引脚

测试


  • 这里导出了 MSH 串口的命令&#xff0c;这样再串口输入beep_test 3 这样的命令就可以让蜂鸣器吱吱叫了
  • 如&#xff1a;beep_test 3&#xff0c;蜂鸣器叫 3声

msh >beep_test 3
beep_power_on : beep on
beep_power_on : beep off
beep_power_on : beep on
beep_power_on : beep off
beep_power_on : beep on
beep_power_on : beep off

小结


  • 普通的蜂鸣器控制起来很方便&#xff0c;类似引脚控制
  • 注意 shell 命令执行的环境是线程环境&#xff0c;也就是rt_thread_mdelay(100)这的延时函数&#xff0c;需要在线程环境中执行&#xff0c;不能在中断环境&#xff0c;如按键中断里执行延时函数
  • 如果想使用【按键控制BEEP】&#xff0c;需要线程环境&#xff0c;或使用【工作队列】&#xff0c;这个实现方法&#xff0c;后面再整理出来

推荐阅读
  • STM32代码编写STM32端不需要写关于连接MQTT服务器的代码,连接的工作交给ESP8266来做,STM32只需要通过串口接收和发送数据,间接的与服务器交互。串口三配置串口一已 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • 本文详细介绍了在MyBatis框架中如何通过#和$两种方式来传递SQL查询参数。使用#方式可以提高执行效率,而使用$则有助于在复杂SQL语句中更好地查看日志。此外,文章还探讨了不同场景下的参数传递方法,包括实体对象、基本数据类型以及混合参数的使用。 ... [详细]
  • 题面:P3178[HAOI2015]树上操作好像其他人都嫌这道题太容易了懒得讲,好吧那我讲。题解:第一个操作和第二个操作本质上是一样的&# ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • 在学习了Splay树的基本查找功能后,可能会觉得它与普通的二叉查找树没有太大的区别,仅仅是通过splay操作减少了时间开销。然而,Splay树之所以被誉为“序列之王”,主要在于其强大的区间操作能力。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 本文将作为我硕士论文的一部分,但鉴于其内容的独特性和趣味性,决定单独发布。文中将定义一些皮亚诺公理,并介绍如何使用这些公理进行等式替换,以证明定理。 ... [详细]
  • 本文探讨了如何在Sitecore 9环境中通过Postman使用API密钥发送请求,包括解决常见错误的方法。 ... [详细]
  • 本文探讨了在 PHP 的 Zend 框架下,使用 PHPUnit 进行单元测试时遇到的 Zend_Controller_Response_Exception 错误,并提供了解决方案。 ... [详细]
  • 如何使用Maven将依赖插件一并打包进JAR文件
    本文详细介绍了在使用Maven构建项目时,如何将所需的依赖插件一同打包进最终的JAR文件中,以避免手动部署依赖库的麻烦。 ... [详细]
  • 本文总结了 #define 在 C/C++ 编程中的多种用途和技巧,包括定义常量、函数、宏以及条件编译等,并提供了详细的示例和注意事项。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
author-avatar
10灬月
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有