【NUCLEO-U083RC】DAC输出与内置比较器测试
[复制链接]
测试介绍
这次测试是一次复合测试,完成了DAC和COMP两个测试,该测试是测试STM32U083的DAC和内部的比较器测试,测试通过DAC生成电压信号,然后将电压信号引入MCU的内部运放电路,通过设置比较条件观察测试结果。
硬件使用STM32U083 MCU的NUCLEO-U083RC开发板,需要使用MCU的DAC1外设,COMP1外设。LED4作为比较指示,LED4亮标志有中断发生。
使用BUTTON按键,改变DAC输出的值。
将PA1和PA4使用导线连接起来。按压BUTTON改变设置,直到LED4亮起。
硬件连接与设置
DAC设置:外设:DAC1,输出方式:外部输出
COMP设置:外设:COMP1,比较电压:1/2内部参考源,中断打开。
COMP1设置
DAC1设置
BSP设置,使用LED4和按键BUTTON1,打开按键的中断
测试程序与工作原理
COMP比较器,的比较输入是物理引脚PA1。比较参考:内部参考源和外部参考源,也可以是DAC的通道,比较输出结果:可以使用查询方式,也可以使用中断方式,本测试使用中断方式,同时也可以使用输出到物理引脚,这种方式不需要MCU的参与,响应速度非常快。
测试中使用了BUTTON1按键,启用了按键的中断模式,在中断中设置UserButtonStatus值,来驱动测试。
/**
* @brief EXTI line detection callbacks
* @param GPIO_Pin: Specifies the pins connected EXTI line
* @retval None
*/
void BSP_PB_Callback(Button_TypeDef Button)
{
UserButtonStatus = 1;
}
|
主程序中查询UserButtonStatus值修改DAC的输出电压。
if (UserButtonStatus == 1)
{
UserDACValue = (UserDACValue + 10) % 4096;
if (HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_8B_R, UserDACValue) != HAL_OK)
{
/* Setting value Error */
Error_Handler();
}
UserButtonStatus=0;
}
|
整个程序不是非常复杂。
比较器中断程序。
/**
* @brief Comparator interruption callback
* @note This function is called when comparator threshold is triggered.
* @param hcomp COMP handle
* @retval None
*/
void HAL_COMP_TriggerCallback(COMP_HandleTypeDef *hcomp)
{
/* Set LED state in function of comparator output level */
if (HAL_COMP_GetOutputLevel(hcomp) == COMP_OUTPUT_LEVEL_HIGH)
{
BSP_LED_Off(LED4);
}
else
{
BSP_LED_On(LED4);
}
}
|
测试过程
将引脚PA1和PA4连接,板子上电
开始LED4是熄灭状态。
开始按压BOTTON1,连续按压几次。
LED4亮起,说明中断起作用了。
测试总结
这是第一次测试COMP输出没有经验,整个测试其实是分开做的,开始参考DAC_SimpleConversion例程,调试DAC输出。然后驱动按键,在测试过程中,按键的中断过程怎么也起做,但是中断程序能进入,这让我感到奇怪,后来发现是BSP版本问题,使用正确的版本之后完成。主要是:BSP_PB_Callback文件名称造成的,注意使用BSP驱动里声明的名称。
按键调试好之后,调试COMP的程序,参考了COMP_CompareGpioVsVrefInt_IT程序,整个过程用了2天的时间,才把COMP搞明白了。
|