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

如何做网站新手深圳网络推广团队

如何做网站新手,深圳网络推广团队,自适应和响应式网站,制作网站赚钱相关电路与IO引脚 注意&#xff1a;串口打印重定向后使用printf打印需要在keil里勾选 Use MicroLIB &#xff0c;否则会卡住。 参看&#xff1a;https://zhuanlan.zhihu.com/p/565613666 串口重定向&#xff1a; /* USER CODE BEGIN Includes */#include <stdio.h>//…

相关电路与IO引脚

注意:串口打印重定向后使用printf打印需要在keil里勾选 Use MicroLIB ,否则会卡住。 

参看:https://zhuanlan.zhihu.com/p/565613666

串口重定向:

/* USER CODE BEGIN Includes */#include <stdio.h>// 包含标准输入输出头文件/* USER CODE END Includes */int fputc(int ch,FILE *f){//采用轮询方式发送1字节数据,超时时间设置为无限等待HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,HAL_MAX_DELAY);return ch;}int fgetc(FILE *f){uint8_t ch=0;// 采用轮询方式接收 1字节数据,超时时间设置为无限等待HAL_UART_Receive( &huart1,(uint8_t*)&ch,1, HAL_MAX_DELAY );return ch;}

ADC的GPIO复用引脚表:

 参考:

视频教程:14.1和14.2节

【【14.1】STM32 ADC模数转换器 感知世界的钥匙——Kevin带你读《STM32Cube高效开发教程基础篇》】 https://www.bilibili.com/video/BV1CV4y1k71M/?share_source=copy_web&vd_source=9332b8fc5ea8d349a54c3989f6189fd3

博客:

https://blog.csdn.net/little_grapes/article/details/121154513

ADC相关函数:

 实验内容

1、利用 ADC1 通道 3 采样 PA3 的电压值,将 ADC 采样值和转换的电压值通过串行口返回, 调节电位器,观察运行结果。

根据前面的复用引脚表,选择ADC1的通道IN3。

CubeMX配置如下,

采样时间(sampling time)选择55.5cycles,采样时间长一些结果更准确。

因为也要使用中断方式,所以要开启中断

 

轮询方式:

  /* USER CODE BEGIN 2 */HAL_ADCEx_Calibration_Start(&hadc1);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///轮询HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1,50);//is it finished?if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC)){adc_res=HAL_ADC_GetValue(&hadc1);printf("voltage value:%.1f V\r\n",adc_res*3.3/4095);}//延时一段时间再启动转换HAL_Delay(1000);}/* USER CODE END 3 */

 中断方式(直接把轮询相关的代码替换,详见参考的文章)

  /* USER CODE BEGIN 2 *///中断方式启动ADC转换HAL_ADC_Start_IT(&hadc1);/* USER CODE END 2 */

 回调函数:

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{if(hadc->Instance==ADC1){adc_res=HAL_ADC_GetValue(&hadc1);printf("voltage value:%.2f V,original value:%d \r\n",adc_res*3.3/4095,adc_res);}
}

2、编写程序,利用光敏电阻设计光电开关,控制 LED1 点亮和熄灭。

光敏电阻对应引脚PA2,选择ADC1的IN2通道,选择使用定时器作为中断源,注意此时要关闭连续转换,cubemx配置:

记得开启ADC中断。

然后配置定时器,这里用定时器3,频率为72mhz/(7200*5000)

 

 代码:

  /* USER CODE BEGIN 2 *///中断方式启动ADC转换HAL_ADC_Start_IT(&hadc1);//开启定时器3HAL_TIM_Base_Start(&htim3);/* USER CODE END 2 */

 回调函数(这里设置设置计算电压的方法也是按照3.3V作为参考电压,大于2.1V就点亮灯(这里点亮了两个灯),灯的引脚看前面的GPIO实验)

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{if(hadc->Instance==ADC1){adc_res=HAL_ADC_GetValue(&hadc1);//	printf("voltage value:%.1f V\r\n",adc_res*3.3/4095);if(adc_res*3.3/4095>2.1){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0);HAL_GPIO_WritePin(GPIOF,GPIO_PIN_0,1);}	else{HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1);HAL_GPIO_WritePin(GPIOF,GPIO_PIN_0,0);}}
}

3、设计一个室内温控系统,PA3 采样电压表示采集的温度,阈值上限为 2.5V,下限为 1V,采样电压显示在数码管上。

(1)当采样电压低于 1V(温度过低),蜂鸣器鸣叫(模拟声音报警),LED1 闪烁(模 拟光报警),全彩灯打开(模拟加热)。

(2)当采样电压位于 1V~2.5V 时,正常,蜂鸣器不叫,发光二极管不亮,电机不转。

(3)当采样电压高于 2.5V 时(温度过高),蜂鸣器鸣叫(模拟声音报警),LED1 闪烁 (模拟光报警),电机旋转(模拟风扇降温)。

这里蜂鸣器(PB8)用定时器4通道3输出一定频率的PWM控制,led闪烁间隔时间用cnt控制,循环了一定次数才翻转电平。配置如下:

段码表10以后是原来的数字加上了小数点显示 

/* USER CODE BEGIN 0 */uint8_t flag=0;int res=0;
//uint8_t table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80 };//10表示'-'
uint8_t table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80+0x3f,0x80+0x06,0x80+0x5b,0x80+0x4f,0x80+0x66,0x80+0x6d,0x80+0x7d,0x80+0x07,
0x80+0x7f,0x80+0x6f, };//10表示'-'
uint8_t s[]={0,0,0,0,0,0,10,0};
uint16_t adc_res=0;
int light_flag=0;uint8_t n1;uint8_t n2;void write_byte(uint8_t date){unsigned char i;for(i=0;i<8;i++){HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,(date>>(7-i))&0x01);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,1);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,0);}HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,1);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,0);}int fputc(int ch,FILE *f){//采用轮询方式发鿿1字节数据,超时时间设置为无限等待HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,HAL_MAX_DELAY);return ch;}int fgetc(FILE *f){uint8_t ch=0;// 采用轮询方式接收 1字节数据,超时时间设置为无限等待HAL_UART_Receive( &huart1,(uint8_t*)&ch,1, HAL_MAX_DELAY );return ch;}

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{if(hadc->Instance==ADC1){adc_res=HAL_ADC_GetValue(&hadc1);float vol=adc_res*3.3/4095;printf("voltage value:%.2f V\r\n",vol);if(vol <1){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0);light_flag=1;HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, 0);HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, 0);HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);}	else if(adc_res*3.3/4095 >=1 &&adc_res*3.3/4095<=2.5){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1);HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, 0);HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, 0);HAL_TIM_PWM_Stop(&htim4,TIM_CHANNEL_3);light_flag=0;}else{light_flag=1;HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, 1);HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, 0);HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);       }n1=(uint8_t)vol;n2=(uint8_t)(vol*10)%10;//printf(" value:%d V\r\n",n1);//printf(" value:%d V\r\n",n2);}
}

  int cnt=0;/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if(light_flag==1){cnt++;if(cnt==50){cnt=0;HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_0);}}else{HAL_GPIO_WritePin(GPIOF,GPIO_PIN_0,0);cnt=0;}s[7]=n2;s[6]=n1+10;for(int i=8;i<11;i++){write_byte(table[s[15-i]]);HAL_GPIO_WritePin(GPIOF,0x01<<i,0);HAL_Delay(1);HAL_GPIO_WritePin(GPIOF,0x01<<i,1);}}/* USER CODE END 3 */

源文件见个人主页。

http://www.tj-hxxt.cn/news/43695.html

相关文章:

  • 杭州个人做网站今日头条十大热点
  • 建立自己的平台网站吗重庆seowhy整站优化
  • 衡水网站建设培训学校优化关键词的步骤
  • last login wordpress网站seo推广计划
  • 新疆维吾尔自治区建设厅官方网站91关键词
  • 网站备案ip更换百度pc网页版
  • 网站开发项目验收报告seo百度排名优化
  • 做公司的网站的需求有哪些内容网络营销产品的首选产品
  • 邯郸市住房和建设官方网站网站推广论坛
  • 动易网络 官方网站网站权重是怎么提升的
  • 网站建设要不要监理爱站工具包下载
  • 做网站用别人的源码可以吗公司网站建设
  • 合肥做网站汇站网自己怎么搭建网站
  • 常州营销型网站建设百度下载链接
  • 北京微信网站建设电话盘多多搜索引擎入口
  • 网站建设公司上海做网站公司南宁seo优化公司
  • 淘宝网站所用编码湖南网站建设推广
  • 如何做网站发产品销售网络营销策略方案
  • 北京网站建设公司官网站点搜索
  • 网页平面设计公司北京网站seo设计
  • 金华商城网站制作网络营销推广合同
  • 黄江镇网站建设公司杭州seo网站排名优化
  • 老实人做网站贴吧友情链接在哪
  • 做网站找哪家好要钱吗百度官网客服
  • 独山县哪里有做网站的做一个微信小程序需要多少钱
  • 做营销型网站服务游戏推广怎么快速拉人
  • 河南富士康网页优化包括什么
  • 网站做菠菜网络推广运营团队
  • 制作一个景点的网站苏州百度代理公司
  • cf刷枪网站怎么做的sem与seo