版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机产品设计与制作
(stm32机型)袁秀英石梅香项目2、利用SysTick实现温度报警与控制任务2.5STM32深入(二)总目录1项目1、利用GPIO和位带操作实现温度报警
2项目2、利用SysTick实现温度报警与控制
3项目3、利用按键查询实现参数设定及显示
4项目4、利用外部中断实现工件计数显示
5项目5、利用计数器实现工件计数显示和打包控制
6项目6、利用定时器实现直流电动机PWM调速
7项目7、利用ADC实现土壤湿度采集
具体工作任务设计基于STM32单片机的电热恒温烘干箱温度控制系统,将温度控制在50~250℃范围内,要求控温精度±20℃,同时具有超温和欠温报警功能。请进行:1、方案设计2、器件选型3、电路和程序设计4、完成软硬件调试。项目总目标1、进一步理解单片机开关量采集与控制系统的设计方法、工作步骤,掌握开发工具的使用方法;2、理解STM32单片机蜂鸣器驱动、继电器驱动电路以及一般DO驱动电路的设计方法;3、会利用滴答定时器实现蜂鸣器控制、LED闪烁、LED流水控制以及一般延时控制;4、会利用位带操作或GPIO写引脚函数实现蜂鸣器控制、电加热器控制以及一般设备的开关控制;5、能看懂STM32时钟树,学会外部时钟电路、复位电路设计方法和相关编程方法。6、能自主查阅库函数相关资料。子目录项目2、利用SysTick实现温度报警与控制
2.1任务2.1 器件选型与方案设计2.2任务2.2 电路设计与调试
2.3任务2.3 程序设计与调试2.4任务2.4 程序框架的自主创建2.5任务2.5 STM32软硬件深入(二)任务2.5
STM32软硬件深入(二)本任务目标1、能读懂STM32时钟树;2、会根据需要进行时钟设置规划;3、能基本读懂时钟切换程序并调用程序将系统时钟从内部切换到外部高速振荡源。STM32的时钟STM32内部设备众多,对工作速度的要求也不一样有些要求高速工作,比如GPIO;有些则希望低速工作,例如RTC。为协调各器件的工作并降低功耗,STM32设计了比较复杂的,像树一样不断分叉的时钟电路,也被称为时钟树。看懂时钟树可以帮助我们正确进行时钟规划并编写时钟切换程序。时钟电路的结构组成如图所示。STM32时钟引脚1、STM32时钟引脚STM32的时钟引脚有OSC_IN、OSC_OUT和OSC32_IN、OSC32_OUT,分别用于接收外部高速和低速时钟。还有1个引脚MCO,用于向片外输出时钟信号。MCO与PA8引脚复用。上电复位后该引脚默认为PA8。要用该引脚输出时钟,可以利用如下库函数进行设置。名称HAL_RCC_MCOConfig(MCO引脚号,MCO时钟源,MCO分频系数)原型voidHAL_RCC_MCOConfig(uint32_tRCC_MCOx,uint32_tRCC_MCOSource,uint32_tRCC_MCODiv)功能指定MCO引脚的时钟输出,并对MCO引脚做相关初始化。参数1MCO引脚号(RCC_MCOx):哪个MCO引脚输出时钟,只有1个取值:RCC_MCO1,将STM32内部的时钟通过PA8引脚输出。参数2MCO时钟源(RCC_MCOSource),具体取值如下:RCC_MCO1SOURCE_NOCLOCK:无时钟输出RCC_MCO1SOURCE_SYSCLK:输出SYSCLKRCC_MCO1SOURCE_HSI:输出HSIRCC_MCO1SOURCE_HSE:输出HSERCC_MCO1SOURCE_PLLCLK:输出PLLCLK二分频参数3MCO分频系数(RCC_MCODiv):只有一个取值:RCC_MCODIV_1:不对MCO输出做分频示例HAL_RCC_MCOConfig(RCC_MCO1,RCC_MCO1SOURCE_SYSCLK,RCC_MCODIV_1);//MCO引脚输出SYSCLKSTM32时钟源2、STM32时钟源时钟信号按照速度可分为高速(HighSpeed)和低速(LowSpeed);按照时钟来源可分为外部(External)和内部(Internal)。虚框划出的4个电路分别被称为HSI、HSE、LSE、LSI时钟源。它们分别产生HSI(HighSpeedInternal)、HSE(HighSpeedExternal)、LSE(LowSpeedExternal)、LSI(LowSpeedInternal)时钟信号,供stm32内部各设备使用。基本时钟源STM32内部时钟源(1)HSI和LSI
HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。
上电复位后HSI时钟源工作,LSI不工作。
可以利用OSC配置库函数启动或者关闭它们STM32内部时钟源名称HAL_RCC_OscConfig(&OSC初始化结构体变量)原型HAL_StatusTypeDefHAL_RCC_OscConfig(RCC_OscInitTypeDef*RCC_OscInitStruct)功能按照OSC初始化结构体变量的值,设置RCC振荡源。返回值类型:HAL_StatusTypeDef,返回值:(1)HAL_OK(成功)(2)HAL_ERROR(错误)(3)HAL_BUSY(忙)(4)HAL_TIMEOUT(超时)参数OSC初始化结构体变量(RCC_OscInitStruct),类型:RCC_OscInitTypeDef,共有8项内容1.OscillatorType配置哪个振荡器:(1)RCC_OSCILLATORTYPE_NONE(无)(2)RCC_OSCILLATORTYPE_HSE(要配置HSE)(3)RCC_OSCILLATORTYPE_HSI(要配置HSI)(4)
RCC_OSCILLATORTYPE_LSE(要配置LSE)(5)RCC_OSCILLATORTYPE_LSI(要配置LSI)2.LSIState 希望的LSI状态:(1)RCC_LSI_OFF(关断)(2)RCC_LSI_ON(打开)3.HSIState希望的HSI状态:(1)RCC_HSI_OFF(关断)(2)RCC_HSI_ON(打开)4.HSICalibrationValue HSI校准值,取值范围:0x00~0x1F,默认值:RCC_HSICALIBRATION_DEFAULT,0x105.LSEState希望的LSE状态:(1)RCC_LSE_OFF(关断)(2)RCC_LSE_ON(打开LSEOSC,即外部晶振方式)(3)RCC_LSE_BYPASS(旁路LSEOSC,即外部时钟方式)6.HSEState希望的HSE状态:(1)RCC_HSE_OFF(关断)(2)RCC_HSE_ON(打开HSEOSC,即外部晶振方式)(3)RCC_HSE_BYPASS(旁路HSEOSC,即外部时钟方式)7.HSEPredivValueHSE预分频数:RCC_HSE_PREDIV_DIV1(一分频)或RCC_HSE_PREDIV_DIV2(二分频)8.PLL PLL参数,结构体变量,有3项(1)PLLMUL:PLL倍频系数,有15个取值:RCC_PLL_MUL2~RCC_PLL_MUL16(2)PLLSource:PLL时钟源,有2个取值:1)RCC_PLLSOURCE_HSI_DIV2(HSI二分频)2)RCC_PLLSOURCE_HSE(HSE)(3)PLLState:希望的PLL状态,有3个取值:1)RCC_PLL_NONE(无)2)RCC_PLL_OFF/(关)3)RCC_PLL_ON(开)STM32内部时钟源例如要开启LSI,可写程序:RCC_OscInitTypeDef
RCC_OscInitStru; //定义Osc初始化结构体变量RCC_OscInitStru.OscillatorType=RCC_OSCILLATORTYPE_LSI; //要配置LSIRCC_OscInitStru.LSIState=RCC_LSI_ON; //开启LSIHAL_RCC_OscConfig(&RCC_OscInitStru); //按照变量RCC_OscInitStru的设置初始化RCCSTM32外部时钟源(2)HSE和LSE
HSE是高速外部时钟源,可外接4~16MHz的晶振电路,或者<25MHz的外部时钟源。HSE时钟源由HSEOSC电路(振荡频率为4-16MHz)和多路开关组成。
LSE是低速外部时钟,可外接接频率为32.768kHz的晶振电路或外部时钟源。LSE时钟源由LSEOSC振荡电路和多路开关组成。
STM32PLL时钟源(2)HSE和LSE要设置HSE,编程时应将OSC初始化结构体变量的“OscillatorType”项设为:RCC_OSCILLATORTYPE_HSE要使用外部晶振。应将OSC初始化结构体变量的“HSEState”项设为:RCC_HSE_ON,即开启HSEOSC振荡电路,使之与晶振电路共同配合,产生需要的时钟信号。要使用外部时钟源,应将OSC初始化结构体变量的“HSEState”项设为:RCC_HSE_BYPASS,即旁路HSEOSC振荡电路,直接使用外部时钟源输入的时钟信号。STM32PLL时钟源(2)HSE和LSE要设置LSE,编程时应将OSC初始化结构体变量的“OscillatorType”项设为:RCC_OSCILLATORTYPE_LSE要使用外部晶振。应将OSC初始化结构体变量的“LSEState”项设为:RCC_LSE_ON,即开启LSEOSC振荡电路,使之与晶振电路共同配合,产生需要的时钟信号。要使用外部时钟源,应将OSC初始化结构体变量的“LSEState”项设为:RCC_LSE_BYPASS,即旁路LSEOSC振荡电路,直接使用外部时钟源输入的时钟信号。STM32PLL时钟源(3)PLLCLK
PLLCLK是PLL电路的输出。PLL(PhaseLockedLoop)是锁相环电路,它可以对输入脉冲进行倍频。倍频与分频相反,可以获得n倍于输入频率的时钟。
STM32锁相环的倍频系数为2~16,共15种选择。此外,PLL有三个输入可选:HSI二分频HSEHSE二分频例:希望使用8MHz外部晶振,并将其产生的HSE信号输入到PLL电路,9倍频后得到72MHz的PLLCLK,可编写程序如下:voidMyOsc_Config(void){
RCC_OscInitTypeDef
RCC_OscInitStruct;
//定义OSC初始化变量,用于设置RCC振荡源
RCC_OscInitStruct.OscillatorType
=RCC_OSCILLATORTYPE_HSE; //设置HSE
RCC_OscInitStruct.HSEState
=RCC_HSE_ON;
//开启外部8MHz晶振
RCC_OscInitStruct.HSEPredivValue=RCC_HSE_PREDIV_DIV1;
//HSE预分频系数1
RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;
//PLL时钟源是HSE
RCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL9;
//PLL做9倍频,得到72MHz主时钟
RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;
//打开PLLHAL_RCC_OscConfig(&RCC_OscInitStruct);
//按照以上参数,设置RCC振荡源}STM32PLL时钟源STM32
高速时钟配置(1)系统时钟SYSCLK
SYSCLK(SystemClock)称为系统时钟,最大频率72MHz。
SYSCLK是最重要的时钟为后续各个设备(例如内核、存储器、APB1外设、APB2外设、定时器、SDIO、FSMC、I2S等)提供时钟。可以用库函数HAL_RCC_ClockConfig(&时钟初始化结构体变量,Flash等待时间)进行时钟设置STM32
高速时钟配置(1)系统时钟SYSCLK
有HSI、PLLCLK和HSE三个来源
例如要设置SYSCLK来自PLLCLK,可以写程序如下:
RCC_ClkInitTypeDef
RCC_ClkInitStruct;
//定义CLK初始化变量,用于设置RCC时钟
RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_SYSCLK;
//准备配置SYSCLK
RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;
//系统时钟来自PLLCLK
HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2);
//按照以上参数设置时钟,FLASH延迟设为2个等待周期
名称HAL_RCC_ClockConfig(&时钟初始化结构体变量,Flash等待时间)原型HAL_StatusTypeDefHAL_RCC_ClockConfig(RCC_ClkInitTypeDef*RCC_ClkInitStruct,uint32_tFLatency)功能按照时钟初始化结构体变量和Flash等待时间的值,设置SYSCLK、HCLK、APB1、APB2等时钟。返回值类型:HAL_StatusTypeDef:(1)HAL_OK(成功)(2)HAL_ERROR(错误)(3)HAL_BUSY(忙),(4)HAL_TIMEOUT(超时)参数1
时钟初始化结构体变量(RCC_ClkInitStruct):类型:RCC_ClkInitTypeDef,共有5项内容:1.ClockType要配置的时钟:(1)RCC_CLOCKTYPE_SYSCLK(系统时钟)(2)RCC_CLOCKTYPE_HCLK(HCLK)(3)RCC_CLOCKTYPE_PCLK1(PCLK1)(4)RCC_CLOCKTYPE_PCLK2(PCLK2)2.SYSCLKSource系统时钟源:(1)RCC_SYSCLKSOURCE_HSI(来自HSI)(2)RCC_SYSCLKSOURCE_HSE(来自HSE)(3)RCC_SYSCLKSOURCE_PLLCLK(来自PLLCLK)3.AHBCLKDivider PCLK预分频系数,有9个取值:RCC_SYSCLK_DIVnn=1、2、4、8、16、64、128、256、5124.APB1CLKDivider APB1预分频系数,有5个取值:RCC_HCLK_DIVnn=1、2、4、8、165.APB2CLKDivider APB2预分频系数,有5个取值:RCC_HCLK_DIVnn=1、2、4、8、16参数2FLatency:类型:uint32_t,Flash等待时间,有3个取值:(1)FLASH_LATENCY_00等待周期,当0<SYSCLK<24MHz(2)FLASH_LATENCY_11等待周期,当24MHz<SYSCLK≤48MHz(3)FLASH_LATENCY_22等待周期,当48MHz<SYSCLK≤72MHzSTM32
高速时钟配置STM32
高速时钟配置(2)AHB总线时钟(HCLK)HCLK时钟信号由SYSCLK经AHB预分频器获得。HCLK可以为AHB总线设备、内核等设备提供时钟。AHB预分频器的分频系数为1、2、4、8、16、64、128、256、512,可编程设置。默认系数为1,因此AHB时钟(HCLK)最大值也是72MHz。可利用库函数HAL_RCC_ClockConfig(&时钟初始化结构体变量,Flash等待时间)例如:设置AHB预分频系数=2(已知SYSCLK=72MHz)RCC_ClkInitTypeDef
RCC_ClkInitStruct; //定义CLK初始化变量
RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK;
//准备配置HCLKRCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV2;
//AHB预分频系数=2HCLK=72MHz/2=36MHzHAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_1);
//按照以上参数设置时钟,FLASH延迟设为1个等待周期STM32
高速时钟配置(3)APB1(PCLK1)和APB2(PCLK2)时钟分别为挂在APB1和APB2总线上的外设例如GPIO等提供时钟APB1和APB2预分频系数为1、2、4、8、16可选可利用库函数HAL_RCC_ClockConfig(&时钟初始化结构体变量,Flash等待时间)例如:设置APB1预分频系数=2(已知SYSCLK=72MHz)RCC_ClkInitTypeDef
RCC_ClkInitStruct; //定义CLK初始化变量
RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_PCLK1;
//准备配置PCLK1RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;
//APB1预分频系数=2PCLK1=HCLK/2HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2);
//按照以上参数设置时钟,FLASH延迟设为2个等待周期例:希望系统使用8MHz外部晶振,并获得72MHz的SYSCLK、72MHz的HCLK、36MHz的PCLK1、72MHz的PCLK2,请问该如何进行设置并编程?解:可将外部8MHz晶振作为HSE时钟源,将HSE作为PLL输入,PLL9倍频后作为SYSCLK,AHB预分频系数设为1、APB1预分频系数设为2、APB2预分频系数设为1。程序如下:void
MyOsc_Config(void)
//OSC设置函数{
RCC_OscInitTypeDef
RCC_OscInitStruct;
//定义OSC初始化变量,用于设置RCC振荡源RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;//是HSERCC_OscInitStruct.HSEState=RCC_HSE_ON;
//开启外部8MHz晶振RCC_OscInitStruct.HSEPredivValue=RCC_HSE_PREDIV_DIV1;
//HSE预分频系数1RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;
//PLL时钟源是HSERCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL9;
//PLL做9倍频,得到72MHz主时钟RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;
//打开PLLHAL_RCC_OscConfig(&RCC_OscInitStruct);
//按照以上参数,设置RCC振荡源}STM32
高速时钟配置void MyClk_Config(void)
//CLK设置函数{RCC_ClkInitTypeDef
RCC_ClkInitStruct;
//定义CLK初始化变量,用于设置RCC时钟
RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_HCLK\
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
//准备配置SYSCLK、HCLK、PCLK1、PCLK2
RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;
//系统时钟来自PLLCLK:72MHz
RCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;
//AHB一分频:72MHz
RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;
//APB1二分频:36MHz
RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;
//APB2一分频:72MHz
HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2);
//按照以上参数设置系统时钟,FLASH延迟设为2个等待周期}STM32
高速时钟配置做一做:请试着将如上两个函数合成到一个函数里STM32
高速时钟配置STM32
高速时钟配置(4)CSS时钟安全系统CSS是时钟安全系统(ClockSecuritySystem),用于监测HSE时钟信号,并在检测到HSE故障时产生保护:自动将时钟切换回HSI,并关闭HSE振荡器。这可以确保系统不会因为没有时钟而崩溃。CSS可通过编程关闭或打开,相关库函数如表所示。原型voidHAL_RCC_EnableCSS(void)voidHAL_RCC_DisableCSS(void)功能使能CSS安全系统禁止CSSSTM32
高速时钟配置(5)GPIO设备时钟开启
所有GPIO端口都位于APB2总线,由PCLK2提供时钟。CPU执行GPIOA时钟开启库函数后,GPIOA时钟使能信号变为1,与门打开,PCLK2时钟信号被送入GPIOA。名称__HAL_RCC_GPIOx_CLK_ENABLE()__HAL_RCC_GPIOx_CLK_DISABLE()功能使能GPIOx时钟,x=A~G禁止GPIOx时钟,x=A~GSTM32
高速时钟配置(8)其它从图中还可以看出,PCLK2不仅可以为GPIO等APB1设备提供时钟,PCLK2还可送TIM1和8倍频器,为TIM1和TIM8提供时钟PCLK2还可送ADC预分频器,为ADC提供时钟。同样,PCLK1不仅可以为APB1设备提供时钟还可送TIM2~7倍频器,为TIM2~TIM7提供时钟此外,HCLK还可为SDIO(SD卡)、FSMC(扩展存储器)设备提供时钟SYSCLK也可以直接为I2S2、I2S3(Inter-ICSound)设备提供时钟。PLLCLK还可以为USB设备提供时钟。以上这些设备的时钟开启/关闭函数,可以在文件:stm32f1xx_hal_rcc.c和stm32f1xx_hal_rcc.h中找到,这里不再叙述。STM32
低速时钟配置低速时钟主要为IWDG(独立看门狗)和RTC(实时时钟)电路提供时钟。其中独立看门狗的时钟IWDGCLK只能来自LSI。RTC时钟RTCCLK则可以来自LSI、LSE,或HSE的128分频。
STM32
低速时钟配置名称__HAL_RCC_RTC_CONFIG(__RTC_CLKSOURCE__)功能配置RTC时钟源参数__RTC_CLKSOURCE__有4个取值:RCC_RTCCLKSOURCE_NO_CLK: RTC无时钟源RCC_RTCCLKSOURCE_LSE:RTC时钟来自LSERCC_RTCCLKSOURCE_LSI:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于元宇宙的2026年虚拟现实教育内容开发方案
- 微山公司网站建设方案
- 白皮书要点梳理2025年人工智能在金融服务中的应用与挑战方案
- 聚焦2026年数字经济蓝海的区块链金融创新方案
- 互联网医疗行业2025年初步市场趋势解读方案
- 阳台外包钢加固施工方案
- 2025年健康产业市场容量调查方案
- 气象工程工作方案
- 资金预算管理2025年创新方案
- 2025年物流仓储自动化技术报告
- DZ∕T 0210-2020 矿产地质勘查规范 硫铁矿(正式版)
- 《农村小学生自主阅读能力培养的策略研究》课题结题报告
- 北京八中学2024届数学七下期末考试试题含解析
- 黄磷尾气净化工艺-峰峰
- 产后出血护理-课件
- 《超星尔雅学习通》《走进东盟》章节测试题及答案
- 石油产品蒸气压测定法(雷德法)
- 认证汽车座椅及座椅头枕产品强制性认证实施规则
- JJF 1207-2008针规、三针校准规范
- GB/T 40822-2021道路车辆统一的诊断服务
- 烟草的香味成分全解资料讲解
评论
0/150
提交评论