硬件:STM32F103C8T6

  平台:ARM-MDK V5.11

  STM32F系列提供的标准库都是通过结构体来初始化的。比如,以下是GPIO初始化的一个示例代码:

  GPIO_InitTypeDef   GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);

  先定义一个初始化结构体变量,然后根据实际需求给结构体里面的元素赋值,最后调用初始化函数,开始初始化。

  我一般喜欢把这个结构体定义为局部变量,因为初始化过程一般只调用一次,问题就来了。

  这是我在使用TIM1定时器时遇到的一个问题,本想使用TIM1产生一个8us的定时,可是产生的却是1ms的定时。TIM1定时器初始化的代码如下:

void TimeBaseConfig(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period = 575;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(EM4095_TIMEBASE, &TIM_TimeBaseStructure); TIM_ARRPreloadConfig(EM4095_TIMEBASE, ENABLE); /* TIM1 enable counter */
TIM_Cmd(EM4095_TIMEBASE, ENABLE); /* Update interrupt config */
TIM_ITConfig(EM4095_TIMEBASE, TIM_IT_Update, ENABLE);
}

  问题就出在初始化结构定义的位置!运行时,查看这个结构体的值:

  

  由于定义为局部变量,初始化结构体里面的元素的值是随机的,而我的初始化函数里也少了TIM_RepetitionCounter赋值,本来该值应设为0,结果初始值为0x80,

  即重复128次才产生一个定时中断,大概是1ms。

  假如初始化结构体定义为全局变量:

  

  可以看到,结构体定义为全局变量时,所有值都初始化为0.

  结论

  虽然初始化结构定义为全局变量后,每个元素都会初始化为0,但并不一定是你需要的值。因此对外设进行初始化时,结构体中的每一个元素都要根据

  实际需求赋值。

/×××××××××××××××××××××××××××××××××××××××× THE END ×××××××××××××××××××××××××××××××××××××××/

最新文章

  1. linux 查找文件或目录
  2. RAC+asm通过rman恢复到单实例+asm
  3. ucenter用户登录过程
  4. 莫名其妙MyEclipse
  5. Scalaz(11)- Monad:你存在的意义
  6. ArcGis 001270 : 合并数据失败
  7. HDU 3727 Jewel 可持久化线段树
  8. 【转】Eclipse下导入外部jar包的3种方式
  9. Android 播放视频文件
  10. 【codeforce 219D】 Choosing Capital for Treeland (树形DP)
  11. BZOJ2749: [HAOI2012]外星人
  12. Android导入项目时出现红色感叹号
  13. KVM管理平台openebula安装
  14. php字符串与数组的特殊情况
  15. 如何在本地搭建DVWA环境
  16. 跟我一步一步写出MongoDB Web 可视化工具(二)
  17. oracle插入数据的时候报错:ORA-00928: 缺失 SELECT 关键字
  18. CF176E Archaeology
  19. [Java] 绕过证书验证调 HTTPS 接口时报 “SSLHandshakeException: DHPublicKey does not comply to algorithm constraints”的解决办法
  20. (zhuan) Speech and Natural Language Processing

热门文章

  1. vscode 设置
  2. mysql数据库总结笔记
  3. JAVA判断是否是Ajax请求
  4. IDEA结合mybatis插件自动生成代码
  5. windows系统中远程登录ubuntu18服务器的桌面
  6. c++之记一次常见数据类型在fedora和wind10下所占的长度
  7. 【LeetCode】1631. 最小体力消耗路径 Path With Minimum Effort
  8. 1018 - Brush (IV)
  9. HashMap及LinkedHashMap
  10. 【嵌入式】keil不识别野火高速dap的问题