STM32外设结构体定义和时钟初始化语句顺序导致编译

2023-05-16

1.编写外设初始化函数时候需要定义外设的结构体,以及初始化外设时钟等

但是今天偶然间把代码语句写反了,然后编译不通过,提示错误信息为:dac.c(41): error:  #268: declaration may not appear after executable statement in block
        DAC_InitTypeDef DAC_InitStructure;这个错误提示之前一篇博文也出现过,但是原因好像不是这个,还是贴出来作为经验吧。

void DAC_Mode_Config(void)
{

RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
DAC_InitTypeDef DAC_InitStructure;
/*设置DAC的触发源为T2触发*/
DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;
/*使能输出缓冲*/
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
/*不使用波形发生器*/
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_Init(DAC_Channel_1, &DAC_InitStructure);
DAC_Init(DAC_Channel_2, &DAC_InitStructure);
/* 使能通道1由PA4输出 */
DAC_Cmd(DAC_Channel_1, ENABLE);
/* 使能通道2由PA5输出 */
DAC_Cmd(DAC_Channel_2, ENABLE);

/* 使能DAC的DMA请求 */
DAC_DMACmd(DAC_Channel_2, ENABLE);
}

以上开头两句为错误的代码顺序

下面为更正后的顺序

void DAC_Mode_Config(void)
{
DAC_InitTypeDef DAC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

/*设置DAC的触发源为T2触发*/
DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;
/*使能输出缓冲*/
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
/*不使用波形发生器*/
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_Init(DAC_Channel_1, &DAC_InitStructure);
DAC_Init(DAC_Channel_2, &DAC_InitStructure);
/* 使能通道1由PA4输出 */
DAC_Cmd(DAC_Channel_1, ENABLE);
/* 使能通道2由PA5输出 */
DAC_Cmd(DAC_Channel_2, ENABLE);

/* 使能DAC的DMA请求 */
DAC_DMACmd(DAC_Channel_2, ENABLE);
}

将结构体的定义放在外设时钟初始化前就编译通过了,细小经验总结,大家共勉!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32外设结构体定义和时钟初始化语句顺序导致编译 的相关文章

随机推荐