您的位置 首页 设计

STM32学前班教程之六:这些代码我们都用得到

注:下面是一些常用的代码,网上很多但是大多注释不全。高手看没问题,对于我们这些新手就费劲了……所以我把这些代码集中,进行了逐句注释

注:下面是一些常用的代码,网上许多可是大多注释不全。高手看没问题,关于咱们这些新手就费力了……所以我把这些代码会集,进行了逐句注释,期望对新手们有价值。

阅览flash:芯片内部存储器flash操作函数

我的了解——对芯片内部flash进行操作的函数,包含读取,状况,擦除,写入等等,能够答应程序去操作flash上的数据。

根底运用1,FLASH时序推迟几个周期,等候总线同步操作。引荐依照单片机体系运转频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。一切程序中有必要的

用法:FLASH_SetLatency(FLASH_Latency_2);

方位:RCC初始化子函数里边,时钟起振之后。

根底运用2,敞开FLASH预读缓冲功用,加快FLASH的读取。一切程序中有必要的

用法:FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

方位:RCC初始化子函数里边,时钟起振之后。

3、阅览lib:调试一切外设初始化的函数。

我的了解——不了解,也不需求了解。只需知道一切外设在调试的时分,EWRAM需求从这个函数里边取得调试所需信息的地址或许指针之类的信息。

根底运用1,只要一个函数debug。一切程序中有必要的。

用法:#ifdefDEBUG

debug();

#endif

方位:main函数最初,声明变量之后。

4、阅览nvic:体系中止办理。

我的了解——办理体系内部的中止,担任翻开和封闭中止。

根底运用1,中止的初始化函数,包含设置中止向量表方位,和敞开所需的中止两部分。一切程序中有必要的。

用法:voidNVIC_Configuration(void)

{

NVIC_InitTypeDefNVIC_InitStructure;//中止办理康复默许参数

#ifdefVECT_TAB_RAM

//假如C/C++CompilerPreprocessorDefinedsymbols中的界说了VECT_TAB_RAM(见程序库更改内容的表格)

NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);//则在RAM调试

#else//假如没有界说VECT_TAB_RAM

NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);//则在Flash里调试

#endif//完毕判别句子

//以下为中止的敞开进程,不是一切程序有必要的。

//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//设置NVIC优先级分组,方法。

//注:总共16个优先级,分为抢占式和呼应式。两种优先级所占的数量由此代码确认,NVIC_PriorityGroup_x能够是0、1、2、3、4,别离代表抢占优先级有1、2、4、8、16个和呼应优先级有16、8、4、2、1个。规则两种优先级的数量后,一切的中止等级有必要在其中挑选,抢占等级高的会打断其他中止优先履行,而呼应等级高的会在其他中止履行完优先履行。

//NVIC_InitStructure.NVIC_IRQChannel=中止通道名;

//开中止,中止称号见函数库

//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;

//抢占优先级

//NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

//呼应优先级

//NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//发动此通道的中止

//NVIC_Init(&NVIC_InitStructure);//中止初始化

}

5、阅览rcc:单片机时钟办理。

我的了解——办理外部、内部和外设的时钟,设置、翻开和封闭这些时钟。

根底运用1:时钟的初始化函数进程——

用法:voidRCC_Configuration(void)//时钟初始化函数

{

ErrorStatusHSEStartUpStatus;//等候时钟的安稳

RCC_DeInit();//时钟办理重置

RCC_HSEConfig(RCC_HSE_ON);//翻开外部晶振

HSEStartUpStatus=RCC_WaitForHSEStartUp();//等候外部晶振安排妥当

if(HSEStartUpStatus==SUCCESS)

{

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

//flash读取缓冲,加快

FLASH_SetLatency(FLASH_Latency_2);//flash操作的延时

RCC_HCLKConfig(RCC_SYSCLK_Div1);//AHB运用体系时钟

RCC_PCLK2Config(RCC_HCLK_Div2);//APB2(高速)为HCLK的一半

RCC_PCLK1Config(RCC_HCLK_Div2);//APB1(低速)为HCLK的一半

//注:AHB首要担任外部存储器时钟。PB2担任AD,I/O,高档TIM,串口1。APB1担任DA,USB,SPI,I2C,CAN,串口2345,一般TIM。

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

//PLLCLK=8MHz*9=72MHz

RCC_PLLCmd(ENABLE);//发动PLL

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET){}

//等候PLL发动

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

//将PLL设置为体系时钟源

while(RCC_GetSYSCLKSource()!=0x08){}

//等候体系时钟源的发动

}

//RCC_AHBPeriphClockCmd(ABP2设备1|ABP2设备2|,ENABLE);

//发动AHP设备

//RCC_APB2PeriphClockCmd(ABP2设备1|ABP2设备2|,ENABLE);

//发动ABP2设备

//RCC_APB1PeriphClockCmd(ABP2设备1|ABP2设备2|,ENABLE);

//发动ABP1设备

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/257409.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部