[英]STM32 - why the code does not modify the registers like it is supposed to?
我正在使用帶有HAL庫的STM32F072C8T6微控制器。 我寫了一個程序,通過微控制器的DAC引腳發出模擬電壓,但它不起作用。 我運行了調試器,我可以看到當我逐步完成代碼時沒有任何DAC寄存器發生變化。 有誰知道我是否遺漏了代碼中的內容?
我接管了其他項目。 他從CubeMX生成了項目配置。 但是,我沒有項目.ioc文件(CubeMX文件),所以我必須手動添加DAC函數而不是使用CubeMX。 我所做的是我的注釋掉的#define HAL_DAC_MODULE_ENABLED在stm32f0xx_hal_conf.h,並添加stm32f0xx_hal_dac.c和stm32f0xx_hal_dac_ex.c到Drivers文件夾中。
以下是main.c中DAC的代碼:
DAC_HandleTypeDef hdac;
int main(void){
HAL_Init();
SystemClock_Config();
DAC_ChannelConfTypeDef sConfig = {0};
hdac.Instance = DAC;
if (HAL_DAC_Init(&hdac) != HAL_OK)
{
Error_Handler();
}
sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
HAL_DAC_Start( &hdac, DAC_CHANNEL_1);
HAL_DAC_SetValue( &hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2048);
while(1){
}
}
DAC輸出應為1/2 * 3.3V = 1.65V。 但實際電壓為0V,所有DAC寄存器仍為0x00。 我還嘗試使用CubeMX創建一個新項目,並且DAC與這個新項目完美配合,因此硬件不是問題。
在RCC中啟用DAC的時鍾。 您的微控制器參考手冊的復位和時鍾控制章節中記錄了應該設置哪個寄存器的位。
只要外設的時鍾未使能,其所有寄存器都讀為0,外設不可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.