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

发布者:忙中取乐最新更新时间:2018-06-26 来源: eefocus关键字:STM32  外设结构体  时钟初始化 手机看文章 扫描二维码
随时随地手机看文章

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);
}

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


关键字:STM32  外设结构体  时钟初始化 引用地址:STM32外设结构体定义和时钟初始化语句顺序导致编译

上一篇:设置外设时钟使能时钟
下一篇:STM32问题记录:外设初始化与外设时钟使能

推荐阅读最新更新时间:2024-03-16 16:07

stm32 系统嘀嗒(SysTick) 定时器 (2)-解决时钟分频问题
static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks SYSTICK_MAXCOUNT) return (1); /* Reload value impossible */ SysTick- LOAD = (ticks & SYSTICK_MAXCOUNT) - 1; /* set reload register */ NVIC_SetPriority (SysTick_IRQn, (1 __NVIC_PRIO_BITS) - 1);
[单片机]
STM32的中断系统理解
STM32中的中断分为异常和中断,STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。 但我 们 一 般 建 议 从 启 动 文 件startup_stm32f10x_hd.s 中查找的,因为不同型号的 STM32 芯片,中断向量表稍微有点区别,在启动文件中,已经有相应芯片可用的全部中断向量。而且在编写中断服务函数时, 需要从启动文件中定义的中断向量表查找中断服务函数名。STM32 的中断如此之多,配置起来并不容易,因此我们需要一个强大而方便的中断控制器 NVI
[单片机]
<font color='red'>STM32</font>的中断系统理解
基于STM32的自动量程电压表的设计方案
方案中的整个系统可以用一块9V电池供电,实现了低功耗和便携功能。交流测量是用AD637真有效值转换芯片将交流信号转换成直流电压后测量;用带钳位保护的反向放大器进行输入电压转换,实现了10MΩ的输入阻抗和高安全性。电路中关键器件采用TI公司的精密运算放大器OPA07和仪表放大器INA128,实现了高精度的测量;ADC采用STM32f103ZET6片内自带的12位AD,实现了低功耗,量程自动切换功能。 0 引言 在智能仪器中,常常用到自动量程转换技术,这使得仪器在很短的时间内自动选取最合适的量程实现高精度的测量。自动量程的实现一般通过控制输入信号的衰减放大倍数实现,就电压表来说其输入测量电压会大于其AD 转换器的输入范围,所以
[单片机]
基于<font color='red'>STM32</font>的自动量程电压表的设计方案
STM32 规范工程建立
我接触过很多STM32工程,无论是开发板自带、网上大牛的还是官方的,它们的工程布局说实话其实还是不错的,但是毕竟是人家的工程,使用起来总是感到有点陌生,老给人一种二手的感觉。所以决定新建一个属于自己风格的工程,并把它奉为自己专用标准的工程模板。这个工程模板自己已经用了好几年了,每当从网上下载到新的代码时,我总是要将它转变成自己的代码然后添加进自己的工程,期间工程也不断的改进过还几次。现在觉得自己的工程可以拿得出手了,所以在这里分享给大家,最起码有个参考作用! 1、工程组的划分 我的工程分成5个组(Group),分别是:APP、BSP、CMISIS、StartUp、STM32F10x_StdPeriph_Driver。如图所示。
[单片机]
<font color='red'>STM32</font> 规范工程建立
STM32的GPIO输出编程实例之点亮三色LED
一、概述: 1、发光二极管简介 发光二极管是半导体二极管的一种,可以把电能转化为光能,常简写为LED。常用的是发红光、绿光或黄光的二极管。发光二极管的反向击穿电压约为5V。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过管子的电流。限流电阻R可用下式计算: R = (E - UF)/IF 式中E为电源电压,UF为LED的正向压降,IF为LED的一般工作电流。LED广泛应用于各种电子电路、家电、仪表等设备中,做电源或电平指示。 2、STM32 GPIO简介 GPIO可以配置成以下8种工作模式: 浮空输入:此端口在默认情况下什么都不接,呈高阻态,这种设置在数据传输时用的比较多。 上拉输入:上拉输入模式与浮空输入模式相
[单片机]
<font color='red'>STM32</font>的GPIO输出编程实例之点亮三色LED
stm32内核外设Systick与普通外设中断优先级比较的验证实验
最近又遇到了使用Systick来产生精确计时,然后又涉及到了Systick的中断优先级的问题。我们老板认为Systick属于内核外 设,中断优先级应该比普通外设高。然后我们说,在网上看到的是,Systick的中断优先级ST官方默认设置15(1111b),然 后换算为4位(M4用4位来表示优先级分组)是3(抢占优先级),3(响应优先级),其实是最低的,但老板说虽然它是最低的,但它是跟CPU紧耦合的内核外设,它依然能打断优先级比它高的普通外设,当然我们也有点不确定网上说的就是对的(还是老板说的就是错的,==)。于是就做了一个对比实验,测试到底是Systick到底能否打断中断优先级比它高的。 实验环境条件如下:MDK v5.21a,
[单片机]
详解STM32启动文件
本文对STM32启动文件startup_stm32f10x_hd.s的代码进行讲解,此文件的代码在任何一个STM32F10x工程中都可以找到。可以点击文末阅读原文直接下载此文件,提取码stm3。 启动文件使用的ARM汇编指令汇总 Stack——栈 Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN= Stack_Mem SPACE Stack_Size __initial_sp 开辟栈的大小为 0X00000400(1KB),名字为 STACK, NOINIT 即不初始化,可读可写, 8(2^3)字节对齐。 栈的作用是用于局部变量,函数调用,函数形
[单片机]
STM32电源管理系统浅谈
电源对电子设备的重要性不言而喻,它是保证系统稳定运行的基础,而保证系统能稳定运行后,又有低功耗的要求。在很多应用场合中都对电子设备的功耗要求非常苛刻,如某些传感器信息采集设备,仅靠小型的电池提供电源,要求工作长达数年之久,且期间不需要任何维护;由于智慧穿戴设备的小型化要求,电池体积不能太大导致容量也比较小,所以也很有必要从控制功耗入手,提高设备的续行时间。 STM32的电源管理系统主要分为: 1、备份域 2、调压器供电电路 3、ADC电源电路 备份域电路 STM32的备份域包括LSE振荡器、RTC、备份寄存器及备份SRAM这些器件,这部分的电路可以通过STM32的VBAT引脚获取供电电源,在实际应用中一般会使用3V的钮扣电
[单片机]
<font color='red'>STM32</font>电源管理系统浅谈
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved