关于error: #5: cannot open source input file “xxxxx.h“: No such file or directory的错误

我们在stm32编程中可能遇到过像图片中一样的错误

出现这个问题的主要原因是因为我们在创建该.h文件的时候没有放对位置,放到了选择文件夹外的默认位置处。

当我们创建新的.h文件它下方的存放位置可以看见是在大工程中。

这时我们就要手动修改放到我们选择的文件夹中

我要放这个文件夹中就需要把要生成的选择这个文件夹添加进来

像这样选择要添加进去文件夹。

如果已经放错了就需要先关闭该.h再在左侧移除,找到该.h删除。再重新添加

#include "stm32f10x.h" // Device header #include "Delay.h" #include "ADC.h" #include "DMA.h" #include "OLED.h" // 统一 ARR 数组类型为 uint16_t uint16_t ARR[2]; int main(void) { OLED_Init(); AD_Init(); MyDMA_Init(); while (1) { // 配置通道 5 并进行转换 AD_ChannelConfig(ADC_Channel_5); DMA_Transfer(); // 配置通道 6 并进行转换 AD_ChannelConfig(ADC_Channel_6); DMA_Transfer(); // 显示转换结果 OLED_ShowNum(2, 1, ARR[0], 4); OLED_ShowNum(2, 6, ARR[1], 4); } } #include "stm32f10x.h" // Device header #include "OLED.h" extern uint16_t ARR[2]; void MyDMA_Init(void) { RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); DMA_InitTypeDef DMA_InitStructure; DMA_InitStructure.DMA_BufferSize = 2; // 数据从外设(ADC 的数据寄存器)传输到内存(ARR 数组) DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ARR; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; // 改为半字(16 位) DMA_InitStructure.DMA_MemoryInc = ENABLE; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; // 改为半字(16 位) DMA_InitStructure.DMA_PeripheralInc = DISABLE; DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; DMA_Init(DMA1_Channel1, &DMA_InitStructure); DMA_Cmd(DMA1_Channel1, DISABLE); ADC_DMACmd(ADC1, DISABLE); } void DMA_Transfer(void) { DMA_SetCurrDataCounter(DMA1_Channel1, 2); // 设置传输数据数量为 2 DMA_Cmd(DMA1_Channel1, ENABLE); ADC_SoftwareStartConvCmd(ADC1, ENABLE); while (DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET); DMA_ClearFlag(DMA1_FLAG_TC1); } #include "stm32f10x.h" // Device header extern uint16_t ARR[2]; void AD_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); RCC_ADC
最新发布
04-02
### STM32F10x ADC与DMA配合使用的初始化及配置 在STM32F10x系列微控制器中,ADC(模数转换器)可以通过DMA(直接存储访问)实现高效的数据传输。以下是基于HAL库的ADC与DMA配合使用的初始化和配置代码示例。 #### 初始化结构体定义 为了使能ADC并将其与DMA关联,需先定义相应的初始化结构体: ```c // 定义ADC句柄 ADC_HandleTypeDef hadc; // 定义DMA句柄 DMA_HandleTypeDef hdma_adc; ``` #### 配置时钟和GPIO引脚 确保ADC通道对应的GPIO引脚已正确配置为模拟输入模式。例如,如果使用的是PA0作为ADC输入,则需要如下设置[^1]: ```c __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef gpio_init = {0}; gpio_init.Pin = GPIO_PIN_0; // PA0 gpio_init.Mode = GPIO_MODE_ANALOG; // 设置为模拟输入模式 gpio_init.Pull = GPIO_NOPULL; // 不启用上下拉电阻 HAL_GPIO_Init(GPIOA, &gpio_init); ``` #### 配置ADC参数 接下来,配置ADC的相关参数,包括分辨率、数据对齐方式以及扫描模式等: ```c hadc.Instance = ADC1; // 使用ADC1实例 hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV8; // 同步时钟分频因子 hadc.Init.Resolution = ADC_RESOLUTION_12B; // 12位分辨率 hadc.Init.ScanConvMode = ENABLE; // 扫描模式开启 hadc.Init.ContinuousConvMode = ENABLE; // 连续转换模式开启 hadc.Init.DiscontinuousConvMode = DISABLE; // 关闭不连续转换模式 hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; // 外部触发边沿禁用 hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; // 数据右对齐 hadc.Init.NbrOfConversion = 1; // 转换次数为1次 if (HAL_ADC_Init(&hadc) != HAL_OK) { Error_Handler(); // 错误处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值