之前在学习低功耗时,遇到了关于休眠的一些问题。主要总结下停止休眠的。
并且,有一句:所以,在唤醒后,使用了内部时钟,显示出的效果是led闪烁变慢。我在代码中添加了定时器定时休眠,结果就发现了:尽管其他的IO处于休眠的状态,但用JLink调试时,可以看到我的定时器值还在变化,而且变得速度比原先慢了很多。还有一个现象就是,在读取按键时,显示的结果也变得凌乱。在网上找的案例中,有用函数clock(自己写的)来重新初始化。但我作为初学者还得让我改时钟的配置,倒不如直接用SystemInit:`void EXTI2_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line2);
LED1=1;
SystemInit();
}
`
我可以直接剖析这个函数解决问题。另外,在查找寄存器的时候,有些寄存器在中文手册和权威指南上都找不到。最后,在官网给的资料上找到了关于这些寄存器的详细介绍。
关键字:stm32f1 停止休眠 时钟问题
引用地址:
stm32f1 的停止休眠时钟问题
推荐阅读最新更新时间:2024-03-16 16:11
STM32F1(Cortex M3内核)位带操作
本文参考《STM32_参考手册》2.3.2 位段 《CM3权威指南》第五章 存储器系统 Cortex M3内核有两个位带区,对应的是片上RAM区和片上外设的最低的1MB地址范围,而位带别名区里面的每个字对应位带区的一个比特,也就是对位带别名区的一个字的操作相当于对位带区对应一个位的置零或者置一。Cortex M3的位带区和位带别名区如下图所示。 从位带区到位带别名区有如下的映射关系: bit_word_addr =bit_band_base + (byte_offset×32) + (bit_number×4) 其中:bit_word_addr是别名存储器区中字的地址,它映射到某个目标位。
[单片机]
STM32F1笔记(四)NVIC中断优先级管理
STM32将中断分为5个组,组0~4。配置代码如下: NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 在标准库里,分组的定义如下: /** @defgroup Preemption_Priority_Group * @{ */ #define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*! 0 bits for pre-emption priority 4 bits for subpriority */ #define NVIC_PriorityGroup_1
[单片机]
工程师笔记|DFSDM 时钟配置问题
1.引言 DFSDM 全称为 Digital filter for sigma delta modulators。顾名思义,其作用主要是对外部 Σ∆调制的数字信号进行滤波。STM32L462xx 系列支持最多 4 个外部串行通道,2 个数字滤波器,最大可达到 24bit 的 ADC 分辨率。并且支持 SPI 接口和曼切斯特编码 1-wire接口。 2.问题分析 客户使用 STM32L462xx 的 DFSDM 连接数字麦克风,将麦克风的 PDM 信号转化为 PCM 信号,并采集数据。使用的参数为 16KHz 采样,2M 左右的时钟驱动数字麦克风,能够正常读取麦克风数据。了解到他们所使用的数字麦克风可以使用 768K 时钟驱动,从而
[单片机]
STM32F1笔记(一)GPIO输出
GPIO:General Purpose Input Output (通用输入/输出)。 GPIO最经典应用:LED灯。 先看电路。声明:参考正点原子战舰开发板。 与LED串联的电阻称为限流电阻。 限流电阻计算公式:R=(U-LED压降)/20ma。 U为LED工作电压,LED一般最大电流为20ma。 在此R=(3.3-0.7)/0.02=130Ω。 因此本次示例中限流电阻阻值大于130Ω,才不会烧坏LED。 再看代码。 GPIO初始化。 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_A
[单片机]
STM32F1进入HardFault_Handler()
在做SRAM访问时,出现问题,问题代码如下: 主函数程序如下: /* * 函数名:main * 描述 : 主函数 * 输入 :无 * 输出 : 无 */ int main(void) { USART1_Config(); printf( USART IS OK!\r\n ); SysTick_Init(); LED_GPIO_Init(); LED_Turn(LEDALL,LED_OFF); printf( 进入SRAM内存测试! \r\n ); FSMC_SRAM_Test(); printf( 进入SRAM内存测试
[单片机]
浅谈stm32f1两路adc采集(非DMA)
由于项目的需要写2路ADC采集,发现采集的电压出现很大的误差。(后来换成ADC1和ADC2模式后解决了)仔细看了一下,不会是板子对应的引脚共用,那到底是怎么回事呢?想到了电路上的上拉电阻,测量出现的电压数值跳变不就是高阻态吗?在程序当中要是利用到上拉电阻不就搞定了吗!翻开某库函数关于ADC的介绍如下: STM32 拥有 1~3 个 ADC(STM32F101/102 系列只有 1 个 ADC),这些 ADC 可以独立使用,也可以使用双重模式(提高采样率)。STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。 它有 18 个通道,可测量 16 个外部和 2 个内部信号源。各通道的 A/D 转换可以单次、连续、扫描
[单片机]
STM32F1和F4的区别?STM32的ADC系统的功能特性
一、STM32F1和F4的区别? 内核不同:F1是Cortex-M3内核,F4是Cortex-M4内核; 主频不同:F1主频72MHz,F4主频168MHz; 浮点运算:F1无浮点运算单位,F4有; 功能性能:F4外设比F1丰富且功能更强大,比如GPIO翻转速率、上下拉电阻配置、ADC精度等; 内存大小:F1内部SRAM最大64K,F4有192K(112+64+16)。 二、介绍以下STM32启动过程? 通过Boot引脚设定,寻找初始地址 初始化栈指针 __initial_sp 指向复位程序 Reset_Hander 设置异常中断 HardFault_Handler 设置系统时钟 SystemInit 调用C库函数 _ma
[单片机]