完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
基于STM32F103C8输入输入实验目的
该项目是在训练时做的一个基于STM32+CUBEMX工具读取温度计输出的PWM波的实验,使用到了定时器读取输入任务和UART输出到串口,最终实现实现数据到的输出。 使用的工具与设备 1.STM32F103C8芯片 2.ST-LINK下载器-用于烧写下载 3.USB串口烧录器-用于串口输出信号到PC 4.(测试)信号反应 5.温度计(输出) PWM方波) 实现流程与原理 0}#mermaid-svg-rvRp2VUBw4Gf5BAc .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-rvRp2VUBw4Gf5BAc .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-rvRp2VUBw4Gfmark5 :#333}#mermaid-svg-rvRp2VUBw4Gf5BAc .marker.cross{stroke:#333} :root { --mermaid-font-family: “trebuchet ms”, verdana, arial;} #mermaid-svg-rvRp2VUBw4Gf5BAc { color rgba(0, 0, 0, 0.75); 字体:} 定时器 2}#mermaid-svg-rvRp2VUBw4Gf5BAc .marker{fill:#333}#mermaid-svg-rvRp2VUBw4Gf5BAc .marker.cross{stroke:#333} :root { --mermaid-font-family: “trebuchet ms”, verdana arial;} #mermaid-svg-rvRp2VUBw4Gf5BAc { 颜色:rgba(0, 0, 0, 0.75); 字体:} 定时器 2}#mermaid-svg-rvRp2VUBw4Gf5BAc .marker{fill:#333}#mermaid-svg-rvRp2VUBw4Gf5BAc .marker.cross{stroke:#333} :root { --mermaid-font-family: “trebuchet ms”, verdana arial;} #mermaid-svg-rvRp2VUBw4Gf5BAc { 颜色:rgba(0, 0, 0, 0.75); 字体:} 定时器 硬件 捕获 UART 输出占空比 使用UART输出到串口监视器:1.CUBE打开UART引脚2.修改的printf函数的输出PWM输入捕获:1.CUBE打开添计时器2.根据捕获原理编写代码3.溢出、功能中断处理 4.通过printf函数输出功能输出值 功能 链接:原理原理 CUBE部分 点击ACCESS TO MCU SELECTOR选择芯片 打开CUBE,搜索并选择芯片STM32F103C8 选择System Core-》SYS-》Debug-》Serial Wire 打开串口线 选择System Core-》RCC-》High Speed Check-》Crystal/Ceramic Resonator 外部晶振 选择定时器-TIM2(行)-》时钟源-》内部时钟(内部时钟) 选择Channel1-》输入捕捉直接模式(输入模式) 打开中断TIM2全局中断 PS:注意右上方A0位置绿色同时TIM2_CHI为一键一打开 选择Connectivity-》USART1-》Mode-》Asynchronous(异步通信) 中断看需求选择 在Clock ConfigurationClock Configuration选择HCLK为72MHz ps:这里HCLK如果为64MHz或者不到最大可能是因为没有把之前的Crystal/Ceramic Resonator 外部晶振打开 在项目经理中填写项目名称 保存位置 选择IDE以及版本 在代码生成器或选中 最后一个生成代码 GENERATE CODE Keil代码部分 串口输出 = 在mian.c中找到并添加 方法一、 /* USER CODE BEGIN Includes */ #include 《stdio.h》 #ifdef __GNUC__ /* With GCC, small printf (option LD Linker-》Libraries-》Small printf set to ‘Yes’) calls __io_putchar() * / #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFF 返回 ch; } /* USER CODE END Includes */ 方法二、 /* USER CODE BEGIN Includes */ #include 《string.h》 #include 《stdio.h》 uint8_t u_buf[64]; //定义的数组,保存数据 #define printf(。..) HAL_UART_Transmit(UART_HandleTypeDef *)&huart1, (uint8_t *)u_buf,sprintf((char*)u_buf,__VA_ARGS__), 0xFFFF); /* 用户代码结束包括 */ 有些代码的目的是生成printf函数的输入 输入输入 = /* USER CODE BEGIN 0 */ int8_t TIM2CH1_CAPTURE_UP_STA=0; //输入高饱和状态 作识别使用 低六位作为消费判断 如:0x111111(3F) int_t TIM2CH1_CAPTURE_DOWNSTA=0; //输入高饱和状态作识别使用低六位作为消费判断 int16_t TIM2CH1_CAPTURE_UP_VAL;//输入高数据数据值T21_CAPTURE_VAL//输入低值值DOWN /* USERCH END * 0/ 部分有高低血糖参数 作为价值和状态位四个参数4_CAPTURE_DOWN_STA例子 如上表所示TIM2CH1_CAPTURE_DOWN_STA的值为0xFF 这里的6、7 位为高位表达表达当前状态例如第7位为1 则TIM2CH1_CAPTURE_DOWN_STA = 0x80 第6位为1则TIM2CH1_CAPTURE_DOWN_STA = 0x400-5 位为低六位而0-5位为低六位 知识繁殖这个最大的次数为0x3F会在代码里秘籍 在主程序头添加代码 /* USERCODE BEGIN 2 */ HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1); //启动启动__HAL_TIM_ENABLE_(&htim2, TIM_IT_UPDATE); //使能停止更新int16_t up=0; //高数据下宽=0; //周期doublety_Cycle//高宽比与生命周期的占空比 /*USERCODE END 2/ while循环内添加以下功能 /* 用户代码开始时 */ while (1) { HAL_Delay(1); if(TIM2CH1_CAPTURE_UP_STA&X80)/ /成功到了一次高数据 { up=TIM2CH1_CAPTURE_UP_STA&0X3F; 上*=65535; //注意力时间总和向上+=TIM2CH1_CAPTURE_UP_VAL; //得到总的高盐时间 up/=0.9845; //高盐时间值TIM2CH1_CAPTURE_UP_STA=0; //清空输入高负载状态 } if(TIM2CH1CAPTURE_DOWN_STA0&X80)//成功输入了一次低数据 { down=TIM2CH1_CAPTURE_DOWNSTA&0X3F; 向下*=65535; //时间总和和down+=TIM2CH1_CAPTURE_DOWN_VAL; //得到总的低盐时间下降/= 0.99225; //周期偏差值TIM2CH1_CAPTURE_DOWNSTA=0; //清空输入低血压状态 } printf(“up = %dtn”,); printf(“down = %dtn”,down); Duty_Cycle = (double)up /(double)down; //由于原因不需格式转换 if(Duty_Cycle != 0) { printf(“占空比:%.4lf °Crn”,((double)上/(双)下)) ; } HAL_Delay(500); } /* 用户代码结束 */ 溢出中断函数↓ 捕获中断函数↓ 输出与验证 使用信号信号发生占空比为0.5的方波 连接PA0(TIM2),另一端接信号的红线 信号电位黑线 接地USB接口连接STM32的P9(TX)P10(RX)端 信号自然数值设定为4KHz 高3.3V占空比为55% 成功输出占空例如下图所示 PS:我们已知设定的频率为4KHz,频率为72MHz 4KHz,占0.5 那么高空时间比值为:72x06/4x103x0.5 =9x103 Hz 与实际输出值相同 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1754 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1613 浏览 1 评论
1053 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1667 浏览 2 评论
1931浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
716浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
562浏览 3评论
587浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
546浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 11:21 , Processed in 0.541539 second(s), Total 44, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号