【电机控制器】PY32F00BF15U6TR——ADC
【电机控制器】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内部温度 六、参考资料 PY32F002BF15U6TR芯片手册 总结 本文仅仅简单介绍了【电机控制器】PY32F00BF15U6TR——ADC,评论区欢迎讨论。

【电机控制器】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内部温度
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值
2.读取ADC内部温度
六、参考资料
总结
本文仅仅简单介绍了【电机控制器】PY32F00BF15U6TR——ADC,评论区欢迎讨论。