1、时钟系统
STM32本身非常复杂,外设非常的多,但是,并不是所有的外设都需要系统时钟这么高的频率,比如看门狗以及RTC时钟只需要几十K的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也越弱,所以对于较复杂的MCU一般都是采用多时钟源的方法来解决这些问题。
2、MDK固件库快速组织代码技巧
现在以简单的GPIO初始化函数为例:
现在我们要初始化某个GPIO端口,我们要怎么快速操作呢?在头文件stm32f10x_gpio.h头文件中,定义GPIO初始化函数为:
void GPIO_Init(GPIO_Type_Def* GPIOx , GPIO_InitTytpeDef* GPIO_InitStruct);
现在我们想写初始化函数,那么我们在不参考其他代码的情况下,怎么组织代码呢?
首先,我们可以看出,函数的入口参数是GPIO_Type_Def类型指针和GPIO_InitTytpeDef类型指针,因为GPIO_Type_Def入口参数比较简单,所以我么通过第二个入口参数GPIO_InitTytpeDef类型指针来讲解。双击GPIO_InitTytpeDef后右键选择“Go To Define ……”
于是定位到 stm32f10x_gpio.h中GPIO_InitTyoeDef的定义处:
typedef struct
{
uint16_t GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
可以看到这个结构体有3个成员变量,这也是告诉我们一个信息,一个GPIO口的状态是由这3个变量来决定的。我们首先要定义一个结构体变量,下面我们定义:
GPIO_InitTypeDef GPIO_InitStructure;
接着,我们要初始化结构体变量GPIO_InitStructure。首先我们要初始化成员变量GPIO_Pin,但是这个变量能设置哪些值呢?这些值的范围有什么规定么?
这里我们就要找到GPIO_Init()函数的实现处,同样,双击GPIO_Init(),右键点击“Go To Define ……”这样我们光标就定位到这个函数的开始处,我们可以看到如下函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
{
………………………………………………
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
………………………………………………
assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
………………………………………………
}
顾名思义,assert_param函数就是对入口参数的有效性进行判断,所以我们可以从这个函数入手,确定我们入口参数的范围。第一行是对第一个参数GPIOx进行有效性判断,双击IS_GPIO_ALL_PERIPH(GPIOx)右键点击“Go To Define ……”定位到了下面的定义:
#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \
((PERIPH) == GPIOB) || \
((PERIPH) == GPIOC) || \
((PERIPH) == GPIOD) || \
((PERIPH) == GPIOE) || \
((PERIPH) == GPIOF) || \
((PERIPH) == GPIOG))
很明显可以看出,GPIOx的取值范围规定只允许是GPIOA~GPIOG。
同样的方法适用于GPIO_Speed和GPIO_Mode。
关键字:STM32 经验总结
引用地址:
STM32经验总结(2)
推荐阅读最新更新时间:2024-03-16 15:15
STM32之timer3产生PWM
一、简介 本文介绍STM32系列如何使用timer3的第3通道(PB0)产生38K频率的PWM。 二、实验平台 库版本:STM32F10x_StdPeriph_Lib_V3.5.0 编译软件:MDK4.53 硬件平台:STM32开发板(主芯片stm32f103c8t6) 仿真器:JLINK 三、版权声明 四、实验前提 1、在进行本文步骤前,请先阅读以下博文: 暂无 2、在进行本文步骤前,请先实现以下博文: 暂无 五、基础知识 暂无 六、实验步骤 1、编写并添加PWM驱动 1)编写驱动GUA_Timer3_PWM.c(存放在“……HARDWARE”) //*********
[单片机]
STM32的CAN总线调试
这一周调试STM32的CAN,从网上搜集了一些资料,感谢原作的无私奉献。 重点说明几个问题: 1、CAN的过滤器 对于过滤器,看中文手册上写的不是太清楚,STM32共有14组过滤器,用以对接收到的帧进行过滤。每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和CAN_FxR1。对于过滤器组,可以将其配置成屏蔽位模式,这样CAN_FxR0中保存的就是标识符匹配值,CAN_FxR1中保存的是屏蔽码,即CAN_FxR1中如果某一位为1,则CAN_FxR0中相应的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器;CAN_FxR1中为0的位表示CAN_FxR0中的相应位可不必与收到的帧进行匹配。过滤器组还可以被配置成标识符列表
[单片机]
STM32使用SWD连接报错总结
使用SWD通过J-Flash烧写STM32时,会出现各式各样的错误; 总结下原因: 1、复位脚被拉低了,这次我遇到的就是复位引脚的电容焊反了(钽电容),可以正常连接,但是烧写程序时会出现如下报错 – - Erasing affected sectors … - ERROR: RAM check failed @ address 0x20000000. - ERROR: Write: 0x03020100 07060504 - ERROR: Read: 0x00000000 00000000 - ERROR: (0 bytes of RAM have been checked successfully) - ERROR: Fail
[单片机]
单片机硬件抗干扰经验总结
在研制带处理器的电子产品时,如何提高抗干扰能力和电磁兼容性? 一、下面的一些系统要特别注意抗电磁干扰: 1、微控制器时钟频率特别高,总线周期特别快的系统。 2、系统含有大功率,大电流驱动电路,如产生火花的继电器,大电流开关等。 3、含微弱模拟信号电路以及高精度A/D变换电路的系统。 二、为增加系统的抗电磁干扰能力采取如下措施: 1、选用频率低的微控制器 选用外时钟频率低的微控制器可以有效降低噪声和提高系统的抗干扰能力。同样频率的方波和正弦波,方波中的高频成份比正弦波多得多。虽然方波的高频成份的波的幅度,比基波小,但频率越高越容易发射出成为噪声源,微控制器产生的最有影响的高频噪声大约是时
[单片机]
STM32的中断及是如何使用
中断是一种机制,通过这种机制,I/O或指令可以暂停处理器的正常执行,并像具有最高优先级一样先执行自己的任务。也就是说,当外部中断发生时(比如来自某个传感器),处理器暂停其正在执行,首先提供中断服务,然后继续其正常执行。 为了了解 STM32F103C8 中的中断,我们将使用按钮作为外部中断。在这里,我们让一个变量从 0 开始每秒增1,并将其显示在16x2 LCD上,每当按下按钮时,LED 亮起,LCD 显示屏会显示 INTERRUPT。 中断类型和 ISR(中断服务程序) 中断大致可以分为两类: 1.硬件中断: 如果到处理器的信号来自某些外部设备,例如按钮或传感器,或者来自其他信号并告诉处理器执行 ISR 中存在的特定任务
[单片机]
初学stm32-Systick滴答时钟定时
滴答定时器概述 Systick定时器,是一个简单的定时器,对于CM3,CM4内核芯片,都有Systick定时器。常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。比如uCOS中,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统中,都采用Systick做uCOS心跳时钟。 Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。 SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。
[单片机]
STM32时钟使能及应用总结
STM32的新手,一般都会对一个问题很纠结。我也是,就是所谓的”时钟问题“。我们在尽心STM32编程时,会痛苦地发现这样一个事实:不管你要干嘛,你首先要做的一件事就是使能时钟。而且可能每一次的时钟还是不同的。 你就会问:为什么要使能时钟?为什么每次使能的时钟还不一样呢?为什么51单片机中没有这些鬼?在学51单片机的时候,基本上接触不到I/O方向和外设时钟的概念,I/O想输入就直接读,想输出就直接赋值,串口、AD转化、外部中断等等也都是想用就用,不需要单独配置时钟。这样在初学时的确方便了很多,不需要有乱七八糟的设置就能让芯片跑起来,但是随之带来的就是所谓的功耗问题。但是作为初学者,谁还管这个啊?能让程序跑起来就已经让我们兴奋得几
[单片机]
意法与厦门大学合作研发32位嵌入式系统
微控制器设计开发的厂商意法半导体协同其增值服务商深圳市博巨兴,宣布与厦门大学签订合作协议,成立“ST嵌入式系统联合实验室”,并举行实验室揭牌仪式。意法半导体持续推动校园合作计划,与中国的大学携手开发嵌入式应用技术和培训电子工程专业学生,再迈出重要的一步。
作为32位微控制器的主导厂商之一,意法半导体将向厦门大学提供先进的基于32位ARM CORTEX-M3的STM32微控制器及其开发工具,信息科学与技术学院(通信工程系、电子工程系、自动化系、计算机系及智能科学与技术系)的本科生及研究生将参与意法半导体的实际项目的开发。此外,意法半导体将提供所需的全部培训和技术支持,从事教学和学术研究,协助大学院校及产业
[单片机]