单片机产品设计与调试-基于STM32F1xx机型和HAL库函数 项目报告2-答案_第1页
单片机产品设计与调试-基于STM32F1xx机型和HAL库函数 项目报告2-答案_第2页
单片机产品设计与调试-基于STM32F1xx机型和HAL库函数 项目报告2-答案_第3页
单片机产品设计与调试-基于STM32F1xx机型和HAL库函数 项目报告2-答案_第4页
单片机产品设计与调试-基于STM32F1xx机型和HAL库函数 项目报告2-答案_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE19《单片机产品设计与制作》项目报告项目2、利用SysTick实现温度报警与控制姓名:学号:

一、任务要求1、能画出系统方框图并进行主要器件选型。2、能画出基于STM32单片机的温度报警控制器电源电路、输入电路、输出电路、复位电路和外部晶振电路;理解其工作原理;并能进行举一反三的设计。3、能画出程序流程图;能利用现有框架,通过位带操作或者GPIO位读写函数编写温度采集、蜂鸣器报警、继电器控制程序、闪烁程序以及流水灯程序;并能够根据电路变化对程序进行适应性修改;会利用普通延时和SysTick延时实现延时功能。4、能读懂STM32时钟树;会根据需要进行时钟设置规划,能基本读懂时钟切换程序并调用程序将系统时钟从内部切换到外部高速振荡源。二、要点记录及成果检验任务2.2电路设计与测试姓名学号日期分数(一)术语记录英文中文翻译NRST低电平复位oscillator

振荡器SystemInit系统初始化SYSCLK系统时钟(二)自主设计1、请设计3.3V和备用电池两组电源供电的系统供电电路。2、请设计两个电接点温度计和PF5、PF6连接的外部上下拉输入电路。3、请设计PA2连接,高电平驱动的蜂鸣器电路。4、请设计PD1连接,三极管+继电器,高电平驱动的电加热器控制电路。5、请画出两种STM32按钮复位电路。6、请设计使用两个外部晶振分别做高速和低速振荡源的外部晶振电路。任务2.3程序设计与调试姓名学号日期分数(一)调试过程记录故障现象:解决办法:原因分析:故障现象:解决办法:原因分析:(二)术语记录英文全称中文翻译英文全称中文翻译Sensor传感器delay延迟Buzzer蜂鸣器tick滴答heat加热SysTick系统滴答(定时器)(三)自主设计(1)针对如下电路,如果将PE2引脚换为PA0,PE4引脚换为PE3,请修改程序,实现温度报警与控制功能。main.c#include"stm32f1xx.h" //stm32定义头文件#include"sys.h" //位带操作头文件#include"sensor.h" //传感器定义头文件#include"buzzer.h" //蜂鸣器定义头文件#include"heat.h" //继电器(加热器)定义头文件#include"SysTick.h" //滴答时钟头文件intmain(){ HAL_Init();Sensor_Init(); //初始化传感器 Buzzer_Init(); //初始化蜂鸣器 Heat_Init(); //初始化继电器(加热器) SysTick_Init(72); //初始化滴答时钟,指出系统时钟频率为72MHz while(1) { if(T_High==0 ) //如果温度超过上限(如果电路用外部上拉,此处改为==1) { Buzzer=!Buzzer; //蜂鸣器报警 delay_us(500); //延时500us Heat=1; //停止加热 } else //否则 {if(T_Low==0 ) //如果温度低于下限(如果电路用外部上拉,此处改为==1) { Buzzer=!Buzzer; //蜂鸣器报警 delay_us(500); //延时500us Heat=0; //开始加热 } else //否则 { Buzzer=0; //蜂鸣器停止报警 } } }}sensor.c#include"sensor.h"voidSensor_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定义GPIO初始化参数 __HAL_RCC_GPIOE_CLK_ENABLE(); /开启GPIOE时钟 __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStructure.Pin=GPIO_PIN_3; //是PE3 GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做输入 GPIO_InitStructure.Pull=GPIO_PULLUP; //内部上拉 HAL_GPIO_Init(GPIOE,&GPIO_InitStructure); //执行GPIOE初始化 GPIO_InitStructure.Pin=GPIO_PIN_0; //是Pa0 GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做输入 GPIO_InitStructure.Pull=GPIO_PULLDOWN; //内部下拉 HAL_GPIO_Init(GPIOA,&GPIO_InitStructure); //执行GPIOA初始化 }Sensor.h#ifndef_SENSOR_H //如果不曾定义符号_SENSOR_H#define_SENSOR_H //则定义定义符号_SENSOR_H #define T_High PAin(0) //定义T_High #define T_Low PEin(3) //定义T_Low voidSensor_Init(void); //声明函数Sensor_Init()#endifBuzzer.c#include"beep.h"voidBeep_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定义GPIO初始化变量 __HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOB时钟 GPIO_InitStructure.Pin=GPIO_PIN_5; //准备对PB5初始化 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出Out_PP GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速输出 HAL_GPIO_Init(GPIOB,&GPIO_InitStructure); //GPIOB初始化 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//使PB5输出0(不响)} Buzzer.h#ifndef_BUZZER_H //如果不曾定义符号_BUZZER_H#define_BUZZER_H //则定义符号_BUZZER_H #defineBuzzer PBout(5) //定义蜂鸣器管腿为PB5 voidBuzzer_Init(void); //声明Buzzer_Init()函数#endifHeat.c#include"heat.h"voidHeat_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定义初始化变量 __HAL_RCC_GPIOC_CLK_ENABLE(); //开启GPIOC时钟 GPIO_InitStructure.Pin=GPIO_PIN_7; //是PC7 GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速输出 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_OD; //开漏输出 HAL_GPIO_Init(GPIOC,&GPIO_InitStructure); //GPIOC初始化 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET);//PC7输出1(不加热)}Heat.h#ifndef_HEAT_H //如果不曾定义符号_HEAT_H#define_HEAT_H //则定义符号_HEAT_H #defineHeat PCout(7) //定义加热器控制引脚 voidHeat_Init(void); //声明Heat_Init()函数#endif(2)针对如下电路,请编写程序,用GPIO位读写或者置位复位库函数代替位带操作,实现温度报警与控制功能。main.c#include"stm32f1xx.h" //stm32定义头文件//#include"sys.h" //位带操作头文件#include"sensor.h" //传感器定义头文件#include"buzzer.h" //蜂鸣器定义头文件#include"heat.h" //继电器(加热器)定义头文件#include"SysTick.h" //滴答时钟头文件intmain(){ u8T_High,T_Low;//定义两个变量分别用于存储温度是否越上限和下限HAL_Init();Sensor_Init(); //初始化传感器 Buzzer_Init(); //初始化蜂鸣器 Heat_Init(); //初始化继电器(加热器) SysTick_Init(72); //初始化滴答时钟,指出系统时钟频率为72MHz while(1) { T_High=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2);//读上限传感器输入T_Low=HAL_GPIO_ReadPint(GPIOE,GPIO_PIN_4);//读下限传感器输入if(T_High==0 ) //如果温度超过上限 { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);//向蜂鸣器输出1; delay_us(500); //延时500usHAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//向蜂鸣器输出0;delay_us(500); //延时500us HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET);//向加热器输出1,停止加热 } else //否则 {if(T_Low==0 ) //如果温度低于下限 {HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);//向蜂鸣器输出1; delay_us(500); //延时500usHAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET;//向蜂鸣器输出0;delay_us(500); //延时500us HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET);//向加热器输出0,加热 } else //否则 { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET;//向蜂鸣器输出1; //蜂鸣器停止报警 } } }}sensor.c#include"sensor.h"voidSensor_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定义GPIO初始化参数 __HAL_RCC_GPIOE_CLK_ENABLE(); //开启GPIOE时钟 GPIO_InitStructure.Pin=GPIO_PIN_2|GPIO_PIN_4; //是PE2和PE4 GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做输入 GPIO_InitStructure.Pull=GPIO_PULLUP; //内部上拉 HAL_GPIO_Init(GPIOE,&GPIO_InitStructure); //执行GPIOE初始化 }Sensor.h#ifndef_SENSOR_H //如果不曾定义符号_SENSOR_H#define_SENSOR_H //则定义定义符号_SENSOR_H //#define T_High PEin(2) //定义T_High(可不定义) //#define T_Low PEin(4) //定义T_Low(可不定义) voidSensor_Init(void); //声明函数Sensor_Init()#endifBuzzer.c#include"beep.h"voidBeep_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定义GPIO初始化变量 __HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOB时钟 GPIO_InitStructure.Pin=GPIO_PIN_5; //准备对PB5初始化 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出Out_PP GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速输出 HAL_GPIO_Init(GPIOB,&GPIO_InitStructure); //GPIOB初始化 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//使PB5输出0(不响) //注意电路不同可能需要输出1}Buzzer.h#ifndef_BUZZER_H //如果不曾定义符号_BUZZER_H#define_BUZZER_H //则定义符号_BUZZER_H //#defineBuzzer PBout(5) //定义蜂鸣器管腿为PB5(可不定义) voidBuzzer_Init(void); //声明Buzzer_Init()函数#endifHeat.c#include"heat.h"voidHeat_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定义初始化变量 __HAL_RCC_GPIOC_CLK_ENABLE(); //开启GPIOC时钟 GPIO_InitStructure.Pin=GPIO_PIN_7; //是PC7 GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速输出 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_OD; //开漏输出 HAL_GPIO_Init(GPIOC,&GPIO_InitStructure); //GPIOC初始化 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET);//PC7输出1(不加热)}Heat.h#ifndef_HEAT_H //如果不曾定义符号_HEAT_H#define_HEAT_H //则定义符号_HEAT_H //#defineHeat PCout(7) //定义加热器控制引脚(可不定义) voidHeat_Init(void); //声明Heat_Init()函数#endif(3)按下K_Left(PE2)按键,Led1(PC0)闪烁,亮1S灭1S;松开按键,Led1(PC0)熄灭。请设计电源、晶振、复位、按键、LED电路,画出程序流程,并利用位带操作编写程序。main.c#include"stm32f1xx.h" //stm32定义头文件#include"sys.h" //位带操作头文件#include"SysTick.h" //滴答时钟头文件#include"key.h" //按键定义头文件#include"led.h" //led定义头文件intmain(){ HAL_Init();SysTick_Init(72); //初始化滴答时钟,指出系统时钟频率为72MHzKey_Init(); //初始化按键 Led_Init(); //初始化led while(1) { if(K_Left==0 ) //如果按键按下 { Led1=!Led1; //LED状态取反 delay_ms(1000); //延时500ms }elseLed1=1;//否则熄灭 }}Key.c#include"key.h" //声明包含key.h文件#include"stm32f10x.h" //声明包含stm32f10x.h文件/***********按键初始化***********************/voidKey_Init(){ GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量,用于存放GPIO初始化参数 __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); //开启GPIOA和GPIOE时钟(可只开启GPIOE时钟) /*********GPIOA_Pin_0初始化**********/GPIO_InitStructure.Pin=GPIO_PIN_0; GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做输入 GPIO_InitStructure.Pull=GPIO_PULLDOWN; //内部下拉 HAL_GPIO_Init(GPIOA,&GPIO_InitStructure); //GPIOA_Pin_0初始化 /**********GPIOE_Pin_2、Pin_3、Pin_4初始化********/ GPIO_InitStructure.Pin=GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4; //是PE2和PE4 GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做输入 GPIO_InitStructure.Pull=GPIO_PULLUP; //内部上拉 HAL_GPIO_Init(GPIOE,&GPIO_InitStructure); //执行GPIOE初始化 //GPIOE初始化(可只对PE2初始化)}key.h#ifndef_KEY_H //如果不曾定义符号_KEY_H#define_KEY_H //则定义定义符号_KEY_H #define K_Up PAin(0) //定义K_Up按键 #define K_Left PEin(2) //定义K_Left按键(可只定义PEin(2)) #define K_Down PEin(3) //定义K_Down按键 #define K_Right PEin(4) //定义K_Right按键 voidKey_Init(void); //声明函数Key_Init()#endif led.c#include"led.h"voidLed_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定义GPIO初始化参数 __HAL_RCC_GPIOC_CLK_ENABLE(); //开启GPIOC时钟 GPIO_InitStructure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3\|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; //是PC0、1、2~7 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; //做输出 GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速输出 HAL_GPIO_Init(GPIOC,&GPIO_InitStructure); //执行GPIOC初始化 }Led.h#ifndef_LED_H //如果不曾定义符号_LED_H#define_LED_H //则定义符号_LED_H #defineLed1 PCout(0) //给输出引脚起名字(可只定义PC0) #defineLed2 PCout(1) #defineLed3 PCout(2) #defineLed4 PCout(3) #defineLed5 PCout(4) #defineLed6 PCout(5) #defineLed7 PCout(6) #defineLed8 PCout(7) voidLed_Init(void); //声明Led_Init()函数#endif //结束if(5)编写Led8(PC7)无条件闪烁程序。main.c#include"stm32f1xx.h" //stm32定义头文件#include"sys.h" //位带操作头文件#include"SysTick.h" //滴答时钟头文件//#include"key.h" //按键定义头文件(不需要)#include"led.h" //led定义头文件intmain(){ HAL_Init();SysTick_Init(72); //初始化滴答时钟,指出系统时钟频率为72MHzKey_Init(); //初始化按键 Led_Init(); //初始化led while(1) { Led18=!Led8; //LED状态取反 delay_ms(500); //延时500ms }} led.c#include"led.h"#include"stm32f1xx.h"/********LED初始化****************************/voidLed_Init(){ GPIO_InitTypeDef GPIO_InitStructure; //定义变量,用于存储GPIO初始化参数 __HAL_RCC_GPIOC_CLK_ENABLE(); //开启GPIOC时钟 /**********GPIOC_Pin_0~Pin_7初始化********/ GPIO_InitStructure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3\|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;; //Pin_0~Pin_7(可只对Pin_7初始化) GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速输出 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_OD; //开漏输出 HAL_GPIO_Init(GPIOC,&GPIO_InitStructure); //GPIOC初始化 Led1=Led2=Led3=Led4=Led5=Led6=Led7=Led8=1;//GPIOC全部熄灭(可只灭PC7)}Led.h#ifndef_LED_H //如果不曾定义符号_LED_H#define_LED_H //则定义符号_LED_H #defineLed1 PCout(0) //给输出引脚起名字(可只定义PC7) #defineLed2 PCout(1) #defineLed3 PCout(2) #defineLed4 PCout(3) #defineLed5 PCout(4) #defineLed6 PCout(5) #defineLed7 PCout(6) #defineLed8 PCout(7) voidLed_Init(void); //声明Led_Init()函数#endif //结束if(6)按下K_Left按键(PE2),Led8(PC7)~Led5(PC4)依次点亮,间隔时间0.5S。请设计电源、复位、晶振、按键、LED电路,画程序流程,编写程序。电路:main.c#include"stm32f1xx.h" //stm32定义头文件#include"sys.h" //位带操作头文件#include"SysTick.h" //滴答时钟头文件#include"key.h" //按键定义头文件#include"led.h" //led定义头文件intmain(){ HAL_Init();SysTick_Init(72); //初始化滴答时钟,指出系统时钟频率为72MHzKey_Init(); //初始化按键 Led_Init(); //初始化led while(1) { if(K_Left==0 ) //如果按键按下 { Led8=0;Led7=1;Led6=1;Led5=1;delay_ms(500); //点亮第1盏 Led8=1;Led7=0;Led6=1;Led5=1;delay_ms(500); //点亮第2盏Led8=1;Led7=1;Led6=0;Led5=1;delay_ms(500); //点亮第3盏 Led8=1;Led7=1;Led6=1;Led5=0;delay_ms(500); //点亮第4盏 }}}Key.c#include"key.h" //声明包含key.h文件#include"stm32f10x.h" //声明包含stm32f10x.h文件/***********按键初始化***********************/voidKey_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定义GPIO初始化参数 __HAL_RCC_GPIOE_CLK_ENABLE(); //开启GPIOE时钟 __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStructure.Pin=GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4; //是PE2和PE4 GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做输入 GPIO_InitStructure.Pull=GPIO_PULLUP; //内部上拉 HAL_GPIO_Init(GPIOE,&GPIO_InitStructure); //执行GPIOE初始化 GPIO_InitStructure.Pin=GPIO_PIN_0; //是PA0 GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做输入 GPIO_InitStructure.Pull=GPIO_PULLDOWN; //内部下拉 HAL_GPIO_Init(GPIOA,&GPIO_InitStructure); //执行GPIOA初始化 }key.h#ifndef_KEY_H //如果不曾定义符号_KEY_H#define_KEY_H //则定义定义符号_KEY_H #define K_Up PAin(0) //定义K_Up按键 #define K_Left PEin(2) //定义K_Left按键(可只定义PEin(2)) #define K_Down PEin(3) //定义K_Down按键 #define K_Right PEin(4) //定义K_Right按键 voidKey_Init(void); //声明函数Key_Init()#endif led.c#include"led.h"voidLed_Init(){GPIO_InitTypeDefGPIO_InitStructure; //定义初始化变量 __HAL_RCC_GPIOC_CLK_ENABLE(); //开启GPIOC时钟 GPIO_InitStructure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; //是PC0~7 GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速输出 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; //开漏输出 HAL_GPIO_Init(GPIOC,&GPIO_InitStructure); //GPIOC初始化 }Led.h#ifndef_LED_H //如果不曾定义符号_LED_H#define_LED_H //则定义符号_LED_H #defineLed1 PCout(0) //给输出引脚起名字(所有引脚可不定义) #defineLed2 PCout(1) #defineLed3 PCout(2)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论