历史上的今天

今天是:2025年08月01日(星期五)

正在发生

2019年08月01日 | stm32使用过程中的注意事项

发布者:Enchanted2021 来源: eefocus关键字:stm32  使用过程  注意事项 手机看文章 扫描二维码
随时随地手机看文章

1.ADC采用值转换成具体的物理量值


ADC采样值在寄存器中是16位整形数据,要转换成具体的电压量,则必须进行换算。例如12位的转换精度,满量程的二进制为0000 1111 1111 1111,对应十进制数为1095,对应的电压为3.3V。所以计算公式为


电压 = (采样二进制值/1096)*3.3(V)


特别注意,转换电压为浮点类型,所以要将采样二进制值强制转换成浮点型。


uint16_t  ADC_ConvertValue;

float     ADCtoVoltage;

 

ADCtoVoltage = ((float)ADC_ConvertValue/4096)*3.3;

2.STM32F0x系列RCC配置


 /*!< At this stage the microcontroller clock setting is already configured,this is done through SystemInit() function which is called from startup file (startup_stm32f0xx.s) before to branch to application main.To reconfigure the default setting of SystemInit() function, refer to system_stm32f0xx.c file */


上面这句话的意思是说,RCC配置在启动文件中调用了system_stm32f0xx.c文件中的SystemInit()函数,该函数又调用了同一源文件中的SetSysClock()函数。SetSysClock的默认配置如下:


①使能HSE,即外部晶振作为时钟来源;②PLL倍频为6,即若晶振为8MHz,则PLL输出频率为48MHz;③PLL作为系统时钟频率SYSCLK。④PCLK=HCLK=SYSCLK。


如果需要修改时钟配置,可以直接在这个函数中直接操作。具体的配置过程和代码参考该函数内容。


3.利用ARM m-内核(CPU)的滴答时钟延时


ARM内核时钟最典型的运用是作为延时的时钟计时。不过注意,在使用延时计时功能前,必须对内核滴答时钟进行设置。


//初始化延迟函数,注意,在使用后面的延时函数前,必须在主函数中调用该初始化函数。

//当使用ucos的时候,此函数会初始化ucos的时钟节拍

//SYSTICK的时钟固定为HCLK时钟的1/8

//SYSCLK:系统时钟

void DelayInit()

{

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟  HCLK/8

fac_us=SystemCoreClock/8000000; //为系统时钟的1/8  

fac_ms=(uint16_t)fac_us*1000;//非ucos下,代表每个ms需要的systick时钟数   

}

 

//延时nus

//nus为要延时的us数.        

void DelayUs(unsigned long nus)

{

uint32_t temp;      

SysTick->LOAD=nus*fac_us; //时间加载,加载寄存器    

SysTick->VAL=0x00;        //清空计数器,计数寄存器

SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          //开始倒数,控制寄存器  

do

{

temp=SysTick->CTRL;

}

while(temp&0x01&&!(temp&(1<<16)));//等待时间到达   

SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       //关闭计数器

SysTick->VAL =0X00;       //清空计数器  

}

//延时nms

//注意nms的范围

//SysTick->LOAD为24位寄存器,所以,最大延时为:

//nms<=0xffffff*8*1000/SYSCLK

//SYSCLK单位为Hz,nms单位为ms

//对72M条件下,nms<=1864 

void DelayMs(unsigned int nms)

{

uint32_t temp;

SysTick->LOAD=(uint32_t)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)

SysTick->VAL =0x00;           //清空计数器

SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          //开始倒数  

do

{

temp=SysTick->CTRL;

}

while(temp&0x01&&!(temp&(1<<16)));//等待时间到达

SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       //关闭计数器

SysTick->VAL =0X00;       //清空计数器

}

4.ADC经DMA传输采样值至内存


F0的ADC在使用之前需要校准。这个7位的校准值也是放在ADC_DR中的,它也会触发DMA请求。可以参照F0的ADC-DMA例程,先做ADC校准、然后再设置DMA,再使能ADC的DMA。"


5.字符串类型的变量定义


假若我们这样声明:


unsigned char Astring;

则变量Astring代表的含义是一个字符串指针变量。本质上来说,在C语言中,字符串是一个字符数组,意思就是字符串是由各个单字节的字符组成,字符串用“”引用,字符用‘’引用。


假若这样定义:


unsigned char Astring = "ABCD";

则这行代码是非法的。因为字符串不能直接赋值给字符串指针。正确的定义如下:


unsigned char Astring[] = "ABCD";

//或者

unsigned char *Astring = "ABCD";

这样则表示Astring指向字符串“ABCD”的起始地址,其中


Astring[0] = 'A';

Astring[1] = 'B';

Astring[2] = 'C';

Astring[3] = 'D';


关键字:stm32  使用过程  注意事项 引用地址:stm32使用过程中的注意事项

上一篇:STM32F103ZET6的引脚分类和几个需要特殊注意的引脚总结
下一篇:STM32F030 PB1引脚无法置高问题的解决

推荐阅读

    7月31日,证监会发审委又迎来了4家上会的企业,其中有两家企业过会成功,除广东丸美上会临时取消审核外,仅剩的一家半导体设计公司晶丰明源IPO过会被否。 对于晶丰明源过会被否的原因,证监会发审委指出几大疑点,1、报告期内经销收入占比较高,有折扣销售收入占比较高且逐期提升;2、报告期发行人综合毛利率小幅上升,低于同行业可比上市公司,...
7月31日,全球巡回举办的大型云技术盛会,AWS技术峰会2019在北京国家会议中心拉开帷幕。作为国内“首家IC上云”AI企业,嘉楠科技技术副总裁吴敬杰首次对外讲述如何在云端进行AI芯片开发。 进入2019AI芯片厂商开始不断纵深发展,其中除了市场、资本纵深的变化,引发AI芯片行业的格局变动,技术研发的纵深发展更是让AI芯片厂商开始全面比拼“内功心法”,整...
据日经亚洲评论报道,菲律宾最大的国营电信公司PLDT旗下的Smart将于周四推出5G移动服务,使用的设备由华为和爱立信提供。外界普遍预测这两家公司将参与其5G网络建设。Smart是菲律宾的第一大移动运营商。去年,菲律宾第二大移动运营商Globe也使用华为设备推出了5G试点服务。可以说,在美国试图围剿华为之际,此次事件标志着该公司在菲律宾获得的又一次胜利...
根据集邦咨询半导体研究中心(DRAMeXchange)最新数据,7月内存价格较上月进一步上涨。其中PC DRAM (DDR4 8Gb)固定交易价格较上月上涨7.89%至4.15美元。NAND的价格在7月也出现了上涨。128Gb多能级电池(MLC)NAND的固定交易价格环比上涨5.28%至4.81美元。这是自2018年9月(5.07美元)以来的最高价格。另外,单级电池NAND封装芯片价格也环比上涨了3%-6...

史海拾趣

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

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved