蓝桥杯stm32R37的使用以及端口输出


前言

练习记录:R37继电器模拟测量电压,以及pwm输出。


提示:以下是本篇文章正文内容,下面案例可供参考

一、模拟测量电压

使用蓝桥杯的开发版R37模拟测量电压,使用ADC单通道模拟。

1.cubemx的配置

我们使用ADC2(还可以使用ADC1,PB12),它是接在PB15引脚的
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
配置完成然后开始代码部分:
这句必须在ADC开始或结束后使用

HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);//校准acd,第一步需要校准adc

ADC读取,此时返回的就是ADC的电压

float adc_read(ADC_HandleTypeDef *hadc)
{
	uint16_t adc_val;//12位只能用16位接受
	float adc_f;
	HAL_ADC_Start(hadc);
	adc_val=HAL_ADC_GetValue(hadc);
	adc_f=adc_val*3.3f/4096.0f;
	return adc_f;
}

二、PWM波的产生和测量

1.配置TIM

在这里插入图片描述

代码部分:

//打开定时器17通道1的PWM输出功能
	HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);
void _pwmWorkByFre(unsigned int compareDate)//设置占空比函数,如何计算不在赘述
{
	__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,compareDate);//设置pause的值
}
### 关于蓝桥杯嵌入式开发STM32 MX资料教程 #### 使用STM32CubeMX进行项目配置 对于参与蓝桥杯竞赛的学生来说,掌握如何利用STM32CubeMX工具来简化硬件抽象层(HAL)库的使用至关重要。通过该软件可以快速生成初始化代码框架,减少手动编写繁琐寄存器操作的时间。 #### ADC多通道数据采集实例 针对具体应用场景如两路模拟信号的同时获取,在设置好相应的引脚映射之后,需定义全局变量用于存储每次读取的结果,并创建专门的任务处理函数负责周期性的触发转换过程以及后续的数据解析工作[^1]。 ```c // 定义两个浮点型数组保存来自不同传感器输入端口所对应的瞬时电平强度 float adcValueChannel1, adcValueChannel2; void Start_ADC_Conversion(void){ HAL_ADC_Start(&hadc); } uint8_t GetAdcAverage(uint8_t channel,float *result){ uint32_t sum=0; for(int i=0;i<NUM_OF_SAMPLES;i++){ if(channel==CHANNEL_1){ sum+=HAL_ADC_GetValue(&hadc); }else{ __HAL_ADC_CHANGE_CHANNEL(&hadc,&sConfigAvgCh2); sum+=HAL_ADC_GetValue(&hadc); } } *result=(float)(sum/NUM_OF_SAMPLES*VOLTAGE_REFERENCE)/MAX_DIGITAL_VALUE; } ``` #### DAC输出控制实践指南 当涉及到向外部电路提供精确电压源的需求时,则可通过调用`set_dac_value()`方法指定目标数从而改变实际物理量大小;得注意的是这里采用了短暂停顿机制确保变化平稳过渡而不至于引起不必要的干扰现象发生[^2]. ```c #include "dac.h" void set_dac_value(float voltage){ /* 将给定范围内的实参线性变换至适合写入寄存器内部表达形式 */ uint32_t dac_data = (voltage / VREF)*(UINT16_MAX+1); /* 更新选定通道上的当前状态 */ HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_12B_R,dac_data); /* 启动更新请求 */ HAL_DAC_Start(&hdac,DAC_CHANNEL_1); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值