【电机控制器】PY32F00BF15U6TR——ADC
@TOC
前言
使用工具:
1.STLINK仿真器
提示:以下是本篇文章正文内容,下面案例可供参考
一、接线
VCC——3.3
GND——GND
SWDIO——SWDIO
SWCLK——SWCLK
二、芯片手册
三、原理图
四、代码
1.读取ADC值——PA7,ADC通道4
void Bsp_ADC_TempSensor_Init(void)
{
ADC_ChannelConfTypeDef sConfig;
/* 使能 ADC 时钟 */
__HAL_RCC_ADC_CLK_ENABLE();
hadc.Instance = ADC1;
/* 配置ADC时钟分频 */
hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV32;
/* 配置采样为12位 */
hadc.Init.Resolution = ADC_RESOLUTION_12B;
/* 数据右对齐 */
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
/* 顺序扫描模式 */
hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
/* 单次转换 */
hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
/* 单次转换 */
hadc.Init.LowPowerAutoWait = DISABLE;
/* 禁用自动延迟转换 */
hadc.Init.ContinuousConvMode = DISABLE;
/* 禁用连续转换模式 */
hadc.Init.DiscontinuousConvMode = DISABLE;
/* 禁用不连续模式 */
hadc.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_TRGO;
/* 外部触发转换 */
hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
/* 上升沿触发 */
hadc.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
/* 在溢出的情况下,DR寄存器被最后一次转换结果覆盖 */
hadc.Init.SamplingTimeCommon = ADC_SAMPLETIME_41CYCLES_5;
/* 通道采样时间为41.5 ADC时钟周期 */
HAL_ADC_Init(&hadc);
sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
sConfig.Channel = ADC_CHANNEL_4;
HAL_ADC_ConfigChannel(&hadc, &sConfig);
HAL_ADCEx_Calibration_Start(&hadc);
}
2.读取ADC内部温度
这里手册错了,实测结果应该是ADC通道8
void Bsp_ADC_TempSensor_Init(void)
{
ADC_ChannelConfTypeDef sConfig;
/* ADC1 */
AdcHandle.Instance = ADC1;
/* 配置ADC时钟分频 */
AdcHandle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV32;
/* 12-bit 分辨率 */
AdcHandle.Init.Resolution = ADC_RESOLUTION_12B;
/* 转换数据的右对齐 */
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
/* 配置扫描模式 */
AdcHandle.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
/* 转换完成标志 */
AdcHandle.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
/* 自动延迟转换功能禁用 */
AdcHandle.Init.LowPowerAutoWait = DISABLE;
/* 连续转换模式禁用 */
AdcHandle.Init.ContinuousConvMode = DISABLE;
/* 禁用连续转换模式 */
AdcHandle.Init.DiscontinuousConvMode = DISABLE;
/* 软件触发 */
AdcHandle.Init.ExternalTrigConv = ADC_SOFTWARE_START;
/* 选择软件触发,该参数无需配置 */
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
/* 在溢出的情况下,DR寄存器被最后一次转换结果覆盖 */
AdcHandle.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
/* 通道采样时间为41.5 ADC时钟周期 */
AdcHandle.Init.SamplingTimeCommon = ADC_SAMPLETIME_41CYCLES_5;
/* ADC 初始化 */
HAL_ADC_Init(&AdcHandle);
/* 设置ADC通道顺序等级 */
sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
/* ADC通道选择 */
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
/* 配置ADC通道 */
HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
/* ADC calibration */
HAL_ADCEx_Calibration_Start(&AdcHandle);
}
五、实验
1.读取ADC值
电源电压供给PA7,2.9V,ADC读取2.91V
2.读取ADC内部温度
六、参考资料
总结
本文仅仅简单介绍了【电机控制器】PY32F00BF15U6TR——ADC,评论区欢迎讨论。