历史上的今天
返回首页

历史上的今天

今天是:2025年04月11日(星期五)

正在发生

2019年04月11日 | STM32单片机常用库函数

2019-04-11 来源:eefocus

1.GPIO初始化函数

用法:


voidGPIO_Configuration(void)

{

GPIO_InitTypeDefGPIO_InitStructure;//GPIO状态恢复默认参数

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_标号|GPIO_Pin_标号;

//管脚位置定义,标号可以是NONE、ALL、0至15。

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//最高输出速度为50MHz

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出

GPIO_Init(GPIOC,&GPIO_InitStructure);//C组GPIO初始化

/*注:以上四行代码为一组,每组GPIO属性必须相同,默认的GPIO参数为:ALL,2MHz,FLATING。如果其中任意一行与前一组相应设置相同,那么那一行可以省略,由此推论如果前面已经将此行参数设定为默认参数(包括使用GPIO_InitTypeDefGPIO_InitStructure代码),本组应用也是默认参数的话,那么也可以省略。以下重复这个过程直到所有应用的管脚全部被定义完毕。*/

}


GPIO基础应用:向管脚置1||0


GPIO_SetBits(GPIOC,GPIO_Pin_1);//置1

GPIO_ResetBits(GPIOC,GPIO_Pin_1);//置0


2.RCC:单片机时钟管理。

管理外部、内部和外设的时钟,设置、打开和关闭这些时钟。 

用法: 

函数初始化


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主要负责外部存储器时钟。APB2负责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设备

}


3.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优先级分组,方式。

NVIC_InitStructure.NVIC_IRQChannel=中断通道名;//开中断,中断名称见函数库

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//响应优先级

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//启动此通道的中断

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

}


注:一共16个优先级,分为抢占式和响应式。两种优先级所占的数量由此代码确定,NVIC_PriorityGroup_x可以是0、1、2、3、4,分别代表抢占优先级有1、2、4、8、16个和响应优先级有16、8、4、2、1个。规定两种优先级的数量后,所有的中断级别必须在其中选择,抢占级别高的会打断其他中断优先执行,而响应级别高的会在其他中断执行完优先执行。


4.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初始化子函数里面,时钟起振之后。


5.LIB:调试所有外设初始化的函数。

所有外设在调试的时候,EWRAM需要从这个函数里面获得调试所需信息的地址或者指针之类的信息。


基础应用1,只有一个函数debug。所有程序中必须的。 

用法:


#ifdefDEBUG

debug();

#endif


位置:main函数开头,声明变量之后。


6.EXTI:外部设备中断函数

外部设备通过引脚给出的硬件中断,也可以产生软件中断,19个上升、下降或都触发。EXTI0~EXTI15连接到管脚,EXTI线16连接到PVD(VDD监视),EXTI线17连接到RTC(闹钟),EXTI线18连接到USB(唤醒)。基础应用1,设定外部中断初始化函数。按需求,不是必须代码。用法:


voidEXTI_Configuration(void)

{

EXTI_InitTypeDefEXTI_InitStructure;//外部设备中断恢复默认参数

EXTI_InitStructure.EXTI_Line=通道1|通道2;

//设定所需产生外部中断的通道,一共19个。

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//产生中断

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;

//上升下降沿都触发

EXTI_InitStructure.EXTI_LineCmd=ENABLE;//启动中断的接收

EXTI_Init(&EXTI_InitStructure);//外部设备中断启动

}


7.systic:系统定时器

可以输出和利用系统时钟的计数、状态。


vu32TimingDelay;//全局变量声明

voidSysTick_Configuration(void)//初始化函数

{

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//设置SysTick时钟源

NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick,2,0);

//设置指定的系统Handler优先级

SysTick_SetReload(9000); /*设置SysTick重装载值72M为基础9000--1ms

SysTick_ITConfig(ENABLE);//使能或者失能SysTick中断

}


voidDelay_nms(u32nTime)//精确延时函数

{

SysTick_CounterCmd(SysTick_Counter_Enable);//使能SysTick计数器

TimingDelay=nTime;

while(TimingDelay!=0);

SysTick_CounterCmd(SysTick_Counter_Disable);//失能SysTick计数器

SysTick_CounterCmd(SysTick_Counter_Clear);//清除计数器值为0

}

voidSysTick_Handler(void)//中断

{

if(TimingDelay)

TimingDelay--;

}

voidUSART_Configuration(void)//串口初始化函数

{

USART_InitTypeDefUSART_InitStructure;//串口设置恢复默认参数USART_InitStructure.USART_BaudRate=9600;//波特率9600

USART_InitStructure.USART_WordLength=USART_WordLength_8b;//字长8位

USART_InitStructure.USART_StopBits=USART_StopBits_1;//1位停止字节

USART_InitStructure.USART_Parity=USART_Parity_No;//无奇偶校验USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFloControl_None;//无流控制USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//打开Rx接收和Tx发送功能

USART_Init(USART1,&USART_InitStructure);//初始化

USART_Cmd(USART1,ENABLE);//启动串口

}


RCC中打开相应串口


RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

1

GPIO里面设定相应串口管脚模式 

//串口1的管脚初始化


GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//管脚9

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出GPIO_Init(GPIOA,&GPIO_InitStructure);//TX初始化GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//管脚10

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输GPIO_Init(GPIOA,&GPIO_InitStructure);//RX初始化


8.注意事项

a)Lib注意事项: 

属于Lib的Debug函数的调用,应该放在main函数最开始,不要改变其位置。 

b)RCC注意事项: 

Flash优化处理可以不做,但是两句也不难也不用改参数…… 

根据需要开启设备时钟可以节省电能 

时钟频率需要根据实际情况设置参数 

c)NVIC注意事项 

注意理解占先优先级和响应优先级的分组的概念 

d)GPIO注意事项 

注意以后的过程中收集不同管脚应用对应的频率和模式的设置。 

作为高低电平的I/O,所需设置:RCC初始化里面打开RCC_APB2 

PeriphClockCmd(RCC_APB2Periph_GPIOA);GPIO里面管脚设定:IO输出(50MHz,Out_PP);IO输入(50MHz,IPU); 

e)USART注意事项: 

发动和接受都需要配合标志等待。 

只能对一个字节操作,对字符串等大量数据操作需要写函数 

使用串口所需设置:RCC初始化里面打开RCC_APB2PeriphClockCmd 

(RCC_APB2Periph_USARTx);GPIO里面管脚设定:串口RX(50Hz,IN_FLOATING);串口TX(50Hz,AF_PP);


推荐阅读

史海拾趣

Blaze Display Technology Co Ltd公司的发展小趣事

随着技术的不断进步,Blaze公司意识到要想在激烈的市场竞争中立于不败之地,必须不断进行技术创新和品质升级。因此,公司加大了研发投入,引进了一批高端技术人才和先进设备,成功研发出了多项具有自主知识产权的核心技术。同时,公司还严格把控产品质量,确保每一块显示屏都达到行业领先水平。

ACEINNA公司的发展小趣事

在国内市场取得一定成绩后,Blaze公司开始积极拓展国际市场。通过与全球知名企业的合作,公司成功将产品打入国际市场,并赢得了良好的口碑。此外,公司还积极参加国际电子展会和交流活动,与全球同行建立了广泛的合作关系,为公司的进一步发展奠定了坚实的基础。

China Semiconductor Corp公司的发展小趣事

随着公司实力的不断增强,CSC开始将目光投向海外市场。公司积极实施国际化战略,在海外设立研发中心和生产基地,拓展国际市场。同时,CSC也加强了与国际同行的交流与合作,吸收借鉴国际先进经验和技术,不断提升自身的国际竞争力。通过国际化布局和全球视野的拓展,CSC逐渐成为了国际半导体产业的重要一员。

这五个故事只是CSC公司发展历程中的一部分缩影,但它们却充分展示了CSC在电子行业中的崛起之路。从初创时期的艰辛与突破,到技术创新的不断突破,再到市场拓展与品牌建设、产业链整合与协同发展以及国际化布局与全球视野的拓展,每一个阶段都凝聚了CSC人的智慧和汗水。正是这些努力和付出,使得CSC在激烈的国际竞争中脱颖而出,成为了中国半导体产业的佼佼者。

CUI Devices公司的发展小趣事

在压电警报器领域,CUI Devices凭借其卓越的技术和产品质量,赢得了全球市场的广泛认可。根据最新的行业报告,CUI Devices在全球压电警报器市场中位列第一梯队,与SATEP、Adafruit Industries LLC和Challenge Electronics等核心厂商共同占据了可观的市场份额。这一成绩的取得,离不开公司多年来的技术创新和市场拓展。

Datalinear公司的发展小趣事

Datalinear公司成立于20世纪初,由一群热衷于数据处理的工程师创立。初创时期,公司面临着资金短缺、技术瓶颈和市场竞争激烈的挑战。然而,创始人凭借着对技术的执着和对市场的敏锐洞察力,成功开发出一款高效的数据处理设备,满足了当时市场对数据处理速度的需求。这款产品迅速在市场上打开销路,为Datalinear公司赢得了第一桶金。

富之光(Fujicon)公司的发展小趣事

自成立以来,富致科技始终秉持创新精神,不断投入研发,引进美国最新的PPTC技术,并结合海内外技术专家的智慧,成功开发出多款高性能的自复式保险丝产品。这些产品凭借其出色的安全性能、稳定性和可靠性,迅速在市场上获得了认可。同时,富致科技积极拓展国内外市场,与众多知名企业和行业伙伴建立了长期稳定的合作关系,进一步巩固了其在PPTC保险丝领域的领先地位。

问答坊 | AI 解惑

单片机学习教程!

学习单片机的教程。 [ 本帖最后由 wxdyqc 于 2009-4-7 15:22 编辑 ]…

查看全部问答>

[期刊/转]DSP混合编程研究

[期刊/转]DSP混合编程研究…

查看全部问答>

智能化RLC测量仪原理

本帖最后由 paulhyde 于 2014-9-15 03:17 编辑 ddddddddddddddddddddd  …

查看全部问答>

Wince6 修改HIVE 注册表出错了

我用 2416 的MCU 在修改 HIVE 注册表的时候 系统启动到 Windows CE Kernel for ARM (Thumb Enabled) Built on Jun 16 2009 at 10:08:15 INFO:OALLogSetZones: dpCurSettings.ulZoneMask: 0xb DCache: 128 sets, 4 ways, 32 line size, 16384 si ...…

查看全部问答>

谁有ep9315的矩阵键盘驱动,我的键盘驱动有问题。谢谢大家了

我的键盘驱动没有行扫描,无论行连接到哪个接口都显示是一个接口的按键。所以只能打印一行的键值。谢谢大家!!…

查看全部问答>

wince6.0 视频软件

请问大家哪里有wince6.0上运行的具有摄像头功能的应用程序,只要有摄像功能就行。…

查看全部问答>

请教IE和PIE的区别?

一个是IEui,一个是PIEui,ui我知道是user interface, 它们二者(ie  和 pie)有什么区别吗?…

查看全部问答>

请大师们猜猜题

本帖最后由 paulhyde 于 2014-9-15 08:53 编辑 2010山东大学生电子设计竞赛主要仪器元件表 时间:2010-09-10 06:53来源:竞赛组委会 作者:竞赛组委会 点击: 6854次 2010 年山东省大学生高教社 XILINX 杯电子设计竞赛 主要仪器设备: 数字频 ...…

查看全部问答>

C8051F单片机应用解析

里面有C8051F单片机的应用笔记,由潘琢金教授翻译的。希望对大家的学习有帮助!…

查看全部问答>

《电机与拖动基础》李发海

第一个附件是我本科用的教材,现在重新学习,分享给大家。 另外再上传几个相关资料,可以对比学习。。呵呵~~  …

查看全部问答>