【IAR工程】STM8S208RB基于ST标准库蜂鸣器(BEEP)驱动

【IAR工程】STM8S208RB基于ST标准库蜂鸣器(BEEP)驱动


  • 🌾寄存器版本《STM8S系列基于IAR开发:蜂鸣器(BEEP)驱动功能模块示例》
  • 🌿相关篇《【IAR工程】STM8S208RB基于ST标准库下GPIO点灯示例》
  • 🌿《【IAR工程】STM8S208RB基于ST标准库下EXTI外部中断》
  • 🌿《【IAR工程】STM8S208RB基于ST标准库下自动唤醒(AWU)》
  • 🔖基于ST STM8S/A标准外设库:STSW-STM8069,版本号:2.3.1
  • 📌STSW-STM8069官方资源下载地址:https://www.st.com/zh/embedded-software/stsw-stm8069.html
  • 🔧IAR编译器版本:IAR Assembler for STMicroelectronics STM8 3.11.1
  • 📌STM8S207/208RBT6最小系统板:https://oshwhub.com/perseverance51/stm8s207rbt6-kai-fa-ban

📑蜂鸣器(BEEP)

当LS时钟工作在128kHz时可产生频率为1kHz,2 kHz或者是4 kHz的蜂鸣信号。

在这里插入图片描述

  • 🌴DEEP输出引脚:PD4
    在这里插入图片描述

🚩注意事项

  • 🔰在使用该功能时,需要配置OPTION Byte(选项字节)
    在这里插入图片描述

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

📑DEEP引脚配置函数

void MyBEEP_Init(void)
{
    //设置PD4为快速推挽输出
   	GPIO_Init(GPIOD , GPIO_PIN_4 , GPIO_MODE_OUT_PP_LOW_FAST);
}

📝主程序代码

  • 🔖包含对内部低速时钟频率测量内容。
/**************************************************************************************
实验现象:打开串口调试助手,选择CH340对应串口号,波特率设置9600, 串口助手上会显示
			lsi_freq_hz= 136898 。

接线说明:	1,STM8S单片机-->LED
		   		PC7-->LED1
                                PC6-->LED2
--------------------------------------------------------------------
                        DEEP -> PD4
--------------------------------------------------------------------
OPTION Bytes选项:
                  AFR7 配置为“Alternate active”

注意事项:	1、点击“Download active application”按钮,程序下载完成后,即可运行程序。
		2、串口1使用的是PA4和PA5引脚,所以这两个IO口不要被占用
***************************************************************************************/



#include "stm8s.h"      /*  添加库函数头文件 */
#include "delay.h"
#include "led.h"
#include "beep.h"
#include "usart.h"
#include <stdio.h>//包含此头文件调用printf函数串口才能有输出


uint32_t LSIMeasurment( void );

/* 主函数 */
int main( void )
{
    u8 i = 0;
    uint32_t lsi_freq_hz;
    disableInterrupts();    //关闭系统中断
    //内部时钟为1分频 = 16Mhz
    CLK_SYSCLKConfig( CLK_PRESCALER_HSIDIV1 );
    LED_Init();
    USART1_Init( 9600 ); //初始化USART1 , 并设置波特率为9600
    MyBEEP_Init();
    /* BEEP calibration */
    lsi_freq_hz = LSIMeasurment() ;
    printf("lsi_freq_hz= %lu \r\n",lsi_freq_hz);
    BEEP_LSICalibrationConfig(lsi_freq_hz);

    enableInterrupts();     //使能系统中断

    while( 1 )
    {
        i++;
        if( i % 20 == 0 )
        {
            LED1_TOGGLE;
            LED2_TOGGLE;
        }
        if( i % 100 == 0 )
        {
                BEEP_Cmd(DISABLE);
                delay_ms(100);
                BEEP_Init(BEEP_FREQUENCY_4KHZ);//1KHz,2KHz,4KHz
                BEEP_Cmd(ENABLE);
        }
        delay_ms( 10 );
    }
}

/**
  * @brief  Measure the LSI frequency using timer IC1 and update the calibration registers.
  * @note   It is recommended to use a timer clock frequency of at least 10MHz in order
	*         to obtain a better in the LSI frequency measurement.
  * @param  None
  * @retval None
  */
uint32_t LSIMeasurment( void )
{

    uint32_t lsi_freq_hz = 0x0;
    uint32_t fmaster = 0x0;
    uint16_t ICValue1 = 0x0;
    uint16_t ICValue2 = 0x0;

    /* Get master frequency */
    fmaster = CLK_GetClockFreq();

    /* Enable the LSI measurement: LSI clock connected to timer Input Capture 1 */
    AWU->CSR |= AWU_CSR_MSR;

#if defined (STM8S903) || defined (STM8S103) || defined (STM8S003) || defined (STM8S001)
    /* Measure the LSI frequency with TIMER Input Capture 1 */

    /* Capture only every 8 events!!! */
    /* Enable capture of TI1 */
    TIM1_ICInit( TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV8, 0 );

    /* Enable TIM1 */
    TIM1_Cmd( ENABLE );

    /* wait a capture on cc1 */
    while( ( TIM1->SR1 & TIM1_FLAG_CC1 ) != TIM1_FLAG_CC1 );
    /* Get CCR1 value*/
    ICValue1 = TIM1_GetCapture1();
    TIM1_ClearFlag( TIM1_FLAG_CC1 );

    /* wait a capture on cc1 */
    while( ( TIM1->SR1 & TIM1_FLAG_CC1 ) != TIM1_FLAG_CC1 );
    /* Get CCR1 value*/
    ICValue2 = TIM1_GetCapture1();
    TIM1_ClearFlag( TIM1_FLAG_CC1 );

    /* Disable IC1 input capture */
    TIM1->CCER1 &= ( uint8_t )( ~TIM1_CCER1_CC1E );
    /* Disable timer2 */
    TIM1_Cmd( DISABLE );

#else
    /* Measure the LSI frequency with TIMER Input Capture 1 */

    /* Capture only every 8 events!!! */
    /* Enable capture of TI1 */
    TIM3_ICInit( TIM3_CHANNEL_1, TIM3_ICPOLARITY_RISING, TIM3_ICSELECTION_DIRECTTI, TIM3_ICPSC_DIV8, 0 );

    /* Enable TIM3 */
    TIM3_Cmd( ENABLE );

    /* wait a capture on cc1 */
    while ( ( TIM3->SR1 & TIM3_FLAG_CC1 ) != TIM3_FLAG_CC1 );
    /* Get CCR1 value*/
    ICValue1 = TIM3_GetCapture1();
    TIM3_ClearFlag( TIM3_FLAG_CC1 );

    /* wait a capture on cc1 */
    while ( ( TIM3->SR1 & TIM3_FLAG_CC1 ) != TIM3_FLAG_CC1 );
    /* Get CCR1 value*/
    ICValue2 = TIM3_GetCapture1();
    TIM3_ClearFlag( TIM3_FLAG_CC1 );

    /* Disable IC1 input capture */
    TIM3->CCER1 &= ( uint8_t )( ~TIM3_CCER1_CC1E );
    /* Disable timer3 */
    TIM3_Cmd( DISABLE );
#endif /* (STM8S903) || (STM8S103) || (STM8S003) || (STM8S001) */

    /* Compute LSI clock frequency */
    lsi_freq_hz = ( 8 * fmaster ) / ( ICValue2 - ICValue1 );

    /* Disable the LSI measurement: LSI clock disconnected from timer Input Capture 1 */
    AWU->CSR &= ( uint8_t )( ~AWU_CSR_MSR );

    return ( lsi_freq_hz );
}

//是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数
void assert_failed( u8* file, u32 line )
{
    while ( 1 )
    {

    }
}
  • 📜串口打印内部LSI时钟频率:
    在这里插入图片描述

  • 🌿BEEP_FREQUENCY_4KHZ测量
    在这里插入图片描述

  • 🌿BEEP_FREQUENCY_1KHZ测量
    在这里插入图片描述

  • 🌿BEEP_FREQUENCY_2KHZ测量
    在这里插入图片描述

📚工程源码

  • 🔖IAR对中文路径不友好,不要将工程解压在带有中文字符路径的文件夹内直接打开工程编译,这样会导致IAR内部检索文件路径将消耗大量CPU资源。
链接: https://pan.baidu.com/s/1XkLkZm2VY9LR2gwMDOYn5A
提取码: spws

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/4246.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

总结803

早上&#xff1a; 6:44起床 7:00~7:04开合跳100 7:09~8:00小湖读英语 8:00~9&#xff1a;30句句真研 9&#xff1a;40~10:00去教室 10:03~10:15阅读《运动改造大脑》 10:15~12:00上课 12:00~12:20背单词 12:23~12:50吃饭 1:00~2:10午觉 2:30~5:00核聚课程一篇考研英…

HashMap, HashTable, ConcurrentHashMap 之间的区别

目录关于线程安全HashTable 和 ConcurrentHashMap 的区别1. 加锁粒度不同(最关键 最核心的区别!!!)2. ConcurrentHashMap 利用了 CAS 机制 (无锁编程)3. 优化了扩容策略关于线程安全 我们知道 HashMap 是线程不安全的. 如果要在多线程环境下使用哈希表, 则可以使用:HashTable …

深度学习语义分割篇——FCN原理详解篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;往期回顾&#xff1a;目标检测系列——开山之作RCNN原理详解    目标检测系列——Fast R-CNN原理详解    目标检测系列——Faster R-CNN原理详解 &#x1f34a;近期目标&…

说微软翻译比谷歌准,有人不信,就拿雾霾造了个句子

导读近年来&#xff0c;谷歌(微博)、微软、亚马逊和Facebook等硅谷巨头在人工智能&#xff08;AI&#xff09;领域进行着军备竞赛。在应用层面&#xff0c;有的开发智能管家、有的做机器人、有的训练AI治疗疾病。谷歌和微软则在翻译领域较上了劲。 长久以来&#xff0c;谷歌翻译…

Redis Stream消息并发和未ack消息处理

文章目录1. RedisStreamConfig2. 消费者MyMessageListener3. RedisStreamUtil4. RedisStreamConstant5. 测试6. 处理消费者已读取未ack的消息redis stream文档参考 https://zhuanlan.zhihu.com/p/60501638 1. RedisStreamConfig package com.tophant.eventdemo.common.config…

CSS3笔试题精讲1

防止父元素高度坍塌 4种方案 父元素的高度都是由内部未浮动子元素的高度撑起的。 如果子元素浮动起来,就不占用普通文档流的位置。父元素高度就会失去支撑,也称为高度坍塌。 即使有部分元素留在普通文档流布局中支撑着父元素,如果浮动 起来的元素高度高于留下的素。那么浮…

MySQL日志管理、备份与恢复

文章目录一.MySQL 日志管理1、错误日志2、通用查询日志3、二进制日志4、慢查询日志5、查看日志6、实例操作二、数据库备份的重要性与分类1、数据备份的重要性2、从物理与逻辑的角度&#xff0c;备份分为&#xff1a;3、从数据库的备份策略角度&#xff0c;备份可分为&#xff1…

Spring Cloud Sentinel实战(四)-流控规则-关联、预热、排队等待

流控规则-关联 名词解释 资源名&#xff1a;唯一名称&#xff0c;默认请求路径针对来源&#xff1a;Sentinel可以针对调用者进行限流&#xff0c;填写微服务名&#xff0c;默认default&#xff08;不区分来源&#xff09;阈值类型/单机阈值&#xff1a; QPS&#xff08;每秒钟…

常见问题自助服务,你做对了吗?

一遍又一遍地回答重复的问题可能会成为客户支持团队的一项令人恼火的任务。当您的业务不断增长时&#xff0c;这些问题的数量可能会让您的座席不知所措。但是&#xff0c;如果您为客户设置一个常见问题自助回复服务&#xff0c;会大大减少这一工作量&#xff0c;提高客户体验&a…

安装部署skywalking8.2

SkyWalking是一个开源的分布式系统跟踪解决方案&#xff0c;它提供了分布式系统的性能监控、调用链追踪、度量分析和服务网格等功能。SkyWalking能够帮助开发人员快速定位分布式系统的性能问题&#xff0c;提高系统的可靠性和可扩展性。 SkyWalking支持多种语言和框架&#xff…

【linux】常用指令大全

这篇文章涵盖了linux中常用的所有指令&#xff0c;欢迎大家阅读查询。(如有不正确的地方&#xff0c;各位大佬可以在评论区指出&#xff0c;我会及时进行更正)。 文章目录登录远程服务器ssh添加删除用户当前路径pwd列出文件目录ls进入cdtreewhoami创建文件touch创建目录mkdir删…

java 高考志愿填报系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 高考志愿填报系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…

发现一个白嫖GPT4.0的方法!真的是完胜3.5!

大家好&#xff0c;我是五竹。 先说个基本的科普&#xff0c;最近被问的人都嘛了。 1、ChatGPT账号只有两种:普通账号和plus账号。 2、普通账号升级到plus账号&#xff0c;需要绑定国外的支付方式&#xff0c;每个月大概130左右&#xff01;plus账号更稳&#xff01;更快&am…

rk3568 音频调节音量-rk809

rk3568 音频调节音量-rk809 daisy使用的是rk3568的主板&#xff0c;系统使用的是v2版本的&#xff0c;使用正常-6dB的音频的文件和耳机声道输出听不清楚&#xff0c;但是使用0dB的能听清楚&#xff0c;所以先从软件上下手修改音量配置&#xff0c;从默认的3改到了0&#xff0c;…

骨传导蓝牙耳机排行榜10强,盘点几款性能高的骨传导耳机

骨传导耳机是一种新型的耳机&#xff0c;它将声音转化为不同频率的机械振动&#xff0c;通过人的颅骨、骨迷路、内耳淋巴液、螺旋器、听觉中枢来传递声波。不需要通过耳道&#xff0c;是一种耳挂式的无线耳机。 骨传导耳机与普通耳机相比&#xff0c;最大的优势是不需要入耳&am…

【Linux系统编程】静态库和共享库

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;Linux系统编程 &#x1f4e3;专栏定位&#xff1a;整理一下 C 相关的知识点&#xff0c;供大家学习参考~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f…

CMD中dos命令

1 Ctrl R 2 有关某个命令的详细信息&#xff0c;请键入 HELP 命令名 ASSOC 显示或修改文件扩展名关联。 ATTRIB 显示或更改文件属性。 BREAK 设置或清除扩展式 CTRL C 检查。 BCDEDIT 设置启动数据库中的属性以控制启动加载。 CACLS 显示或修改文件的访问控制列表(ACL)。 CA…

第十一届“泰迪杯”数据挖掘挑战赛第四场赛前指导直播预告

为推广我国高校数据挖掘实践教学&#xff0c;培养学生数据挖掘的应用和创新能力&#xff0c;增加校企交流合作和信息共享&#xff0c;提升我国高校的教学质量和企业的竞争能力&#xff0c;第十一届“泰迪杯”数据挖掘挑战赛&#xff08;以下简称挑战赛&#xff09;已于2023年3月…

【MySQL】一文彻底搞懂 Redo-log 为什么要两阶段提交?

【MySQL】一文彻底搞懂 Redo-log 为什么要两阶段提交&#xff1f; 文章目录【MySQL】一文彻底搞懂 Redo-log 为什么要两阶段提交&#xff1f;两阶段提交的过程是怎样的&#xff1f;为什么需要两阶段提交&#xff1f;两阶段提交有什么问题&#xff1f;事务提交的方式——组提交两…

day1 计算机组成与结构考点汇总

一、重点知识点 计算机硬件组成、运算器、控制器奇偶校验码、循环冗余校验码、海明码指令系统&#xff1a;指令操作数寻址方式、CISC和RISC、指令流水线的计算存储系统&#xff1a;分级存储、局部性原理、cache、主存编址计算、磁盘输入输出技术&#xff1a;程序查询方式、中断…