当前位置: 首页 > article >正文

stm8s单片机(四)时钟输出与蜂鸣器实验

可配置的时钟输出功能使用户可在外部管脚CCO上输出指定的时钟
用户可选择下面6种时钟信号之一做为CCO时钟

  1. HSE
  2. HSI
  3. HSIDIV
  4. LSI
  5. MASTER
  6. CPU
    固件库中定义的枚举如下:
/**
   * @brief    CLK  Clock Output
   */
typedef enum {
  CLK_OUTPUT_HSI      = (uint8_t)0x00, /*!< Clock Output HSI */
  CLK_OUTPUT_LSI      = (uint8_t)0x02, /*!< Clock Output LSI */
  CLK_OUTPUT_HSE      = (uint8_t)0x04, /*!< Clock Output HSE */
  CLK_OUTPUT_CPU      = (uint8_t)0x08, /*!< Clock Output CPU */
  CLK_OUTPUT_CPUDIV2  = (uint8_t)0x0A, /*!< Clock Output CPU/2 */
  CLK_OUTPUT_CPUDIV4  = (uint8_t)0x0C, /*!< Clock Output CPU/4 */
  CLK_OUTPUT_CPUDIV8  = (uint8_t)0x0E, /*!< Clock Output CPU/8 */
  CLK_OUTPUT_CPUDIV16 = (uint8_t)0x10, /*!< Clock Output CPU/16 */
  CLK_OUTPUT_CPUDIV32 = (uint8_t)0x12, /*!< Clock Output CPU/32 */
  CLK_OUTPUT_CPUDIV64 = (uint8_t)0x14, /*!< Clock Output CPU/64 */
  CLK_OUTPUT_HSIRC    = (uint8_t)0x16, /*!< Clock Output HSI RC */
  CLK_OUTPUT_MASTER   = (uint8_t)0x18, /*!< Clock Output Master */
  CLK_OUTPUT_OTHERS   = (uint8_t)0x1A  /*!< Clock Output OTHER */
} CLK_Output_TypeDef;

相关api有

/**
  * @brief  Enables or disablle the Configurable Clock Output (CCO).
  * @param   NewState : New state of CCEN bit (CCO register).
  * This parameter can be any of the @ref FunctionalState enumeration.
  * @retval None
  */
void CLK_CCOCmd(FunctionalState NewState);

/**
  * @brief  Output the selected clock on a dedicated I/O pin.
  * @param   CLK_CCO : Specifies the clock source.
  * This parameter can be any of the  @ref CLK_Output_TypeDef enumeration.
  * @retval None
  * @par Required preconditions:
  * The dedicated I/O pin must be set at 1 in the corresponding Px_CR1 register \n
  * to be set as input with pull-up or push-pull output.
  */
void CLK_CCOConfig(CLK_Output_TypeDef CLK_CCO);

无源压电式蜂鸣器通常需要300~5kHz的脉冲才能发声
而且CCO与PE0是引脚复用的
在这里插入图片描述

切换系统到128kHz的低速时钟,再配置输出分频64,这样就可以在PE0引脚输出2kHz的方波脉冲。


int main(void)
{
	CLK_LSICmd(ENABLE);//使能LSI起振
	while(CLK_GetFlagStatus(CLK_FLAG_LSIRDY)== RESET);  //等待LSI准备就绪
	CLK_ClockSwitchCmd(ENABLE);   //使能时钟切换
	CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO ,    //
                CLK_SOURCE_LSI ,            //选择内部低速振荡器128K振作为系统时钟源
                DISABLE ,                   //不开启时钟切换中断
                CLK_CURRENTCLOCKSTATE_ENABLE //振荡器使能
                );
  	while(CLK_GetFlagStatus(CLK_FLAG_SWBSY) != RESET);
  	CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);   //如果切换成功,则设置CPU时钟为1分频,让128KHZ时钟作为系统时钟
  	CLK_ClockSwitchCmd(DISABLE);     //关闭切换
  	CLK_HSICmd(DISABLE);    //关闭内部高速HSI
  	GPIO_Init(GPIOE , GPIO_PIN_0 , GPIO_MODE_OUT_PP_LOW_FAST);
  	CLK_CCOConfig(CLK_OUTPUT_CPUDIV64);        // 配置输出为128kHz / 64 =2kHZ
 	CLK_CCOCmd(ENABLE);     //使能系统时钟输出
 	while(1)
    {	
    }
}


http://www.kler.cn/a/516878.html

相关文章:

  • 某书x-s 、x-t 算法 python纯算56版本
  • 09_异步加载_单例模式_常量类配置_不可销毁
  • Java中Queue集合的面试试题及答案解析
  • 差分进化算法 (Differential Evolution) 算法详解及案例分析
  • QT6 + CMAKE编译OPENCV3.9
  • Cesium特效——城市白模的科技动效的各种效果
  • 【飞牛云访问本地NAS数据】手机飞牛云APP异地远程连接fnOS随时随地访问私有应用不受网络限制
  • vim如何设置制表符表示的空格数量
  • DRG/DIP 2.0时代下基于PostgreSQL的成本管理实践与探索(上)
  • mysql 学习3 SQL语句--整体概述。SQL通用语法;DDL创建数据库,查看数据库,删除数据库,使用数据库;
  • VS C++ 配置OPENCV环境
  • AI语言模型竞争加剧:新秀崛起 格局生变
  • ES Module 标准规范
  • C++|开源日志库log4cpp和glog
  • 【云南省乡镇界】面图层shp格式arcgis数据乡镇名称和编码+wgs84坐标无偏移内容测评
  • 【javaSE】内部类(来自类和对象的补充)
  • vue(33) : 安装组件出错解决
  • 在 Ubuntu 上的 Docker 容器中安装 MySQL
  • 订单状态定时处理、来单提醒和客户催单(day10)
  • k8s优雅重启
  • 【GORM】事务,嵌套事务,保存点事务的使用,简单电商平台go案例
  • 力扣动态规划-5【算法学习day.99】
  • 快速排序:一种高效的排序算法
  • Python 预训练:打通视觉与大语言模型应用壁垒——Python预训练视觉和大语言模型
  • WPS计算机二级•表格保护与打印
  • 深入解析:使用 Python 爬虫获取苏宁商品详情