注意:STM32库函数中未用到的参数也一定要初始化
2015-08-09 19:00
281 查看
注意使用STM32库函数时,对于不用的参数,一定要初始化,否则有可能影响到有用的位!
比如我在配置ADC时,精度配置为12位,但输出的一直是8位的,最后发现由于没有初始化ADC_InitStruct.ADC_ExternalTrigConv这个值,这个值是不确定的。库函数中做如下计算
tmpreg |= (uint32_t)(ADC_InitStruct->ADC_Resolution | ((uint32_t)(ADC_InitStruct->ADC_ContinuousConvMode) << 13) |
ADC_InitStruct->ADC_ExternalTrigConvEdge | ADC_InitStruct->ADC_ExternalTrigConv |
ADC_InitStruct->ADC_DataAlign | ADC_InitS
9427
truct->ADC_ScanDirection);
/* Write to ADCx CFGR */
ADCx->CFGR1 = tmpreg;
最终该值影响到了CFGR1,又没有开启参数检查功能,因此出现了上述错误!所以在类似使用中,一定要用初始化函数如:ADC_StructInit(ADC_InitTypeDef*ADC_InitStruct);来将定义的结构体的数据初始化。以防未用到的参数将有效的位改写。
比如我在配置ADC时,精度配置为12位,但输出的一直是8位的,最后发现由于没有初始化ADC_InitStruct.ADC_ExternalTrigConv这个值,这个值是不确定的。库函数中做如下计算
tmpreg |= (uint32_t)(ADC_InitStruct->ADC_Resolution | ((uint32_t)(ADC_InitStruct->ADC_ContinuousConvMode) << 13) |
ADC_InitStruct->ADC_ExternalTrigConvEdge | ADC_InitStruct->ADC_ExternalTrigConv |
ADC_InitStruct->ADC_DataAlign | ADC_InitS
9427
truct->ADC_ScanDirection);
/* Write to ADCx CFGR */
ADCx->CFGR1 = tmpreg;
最终该值影响到了CFGR1,又没有开启参数检查功能,因此出现了上述错误!所以在类似使用中,一定要用初始化函数如:ADC_StructInit(ADC_InitTypeDef*ADC_InitStruct);来将定义的结构体的数据初始化。以防未用到的参数将有效的位改写。
相关文章推荐
- Keil STM32工程环境搭建
- stm32之RTC
- STM32串口操作相关事项
- STM32 SPI工作在主模式时用DMA方式接收数据
- STM32 配置定时器让引脚输出PWM波形
- [嵌入式裸机课程]Cortex-M3开发实训班
- stm32的1602操作显示
- STM32 UART DMA实现未知数据长度接收(转自amoBBs)
- STM32F429 LTDC学习笔记1
- stm32学习笔记---入门环境搭建及开发板的选用
- stm32中断服务函数的机制
- pc寄存器与可寻址空间
- 关于STM32 库函数3.5版的各种坑
- STM32 Printf函数实现方法 (转载)
- STM32 IAP
- 红龙103开发板CAN IAP
- STM32开发板点灯
- [学习笔记]使用GNU Toolchain在STM32上跑起一个最小OS
- STM32 入门教程 系统时钟 SysTick
- ATM32F10x启动文件的选择