STM32固件库SYSTEM 文件夹介绍

发布者:PeacefulSoul最新更新时间:2024-10-15 来源: cnblogs关键字:STM32  固件库  SYSTEM 手机看文章 扫描二维码
随时随地手机看文章

SYSTEM 文件夹里面的代码,此文件夹里面的代码由 ALIENTEK 提供,包含了几乎每个实验都可能用到的延时函数,位带操作,串口打印代码等。SYSTEM 文件夹下包含了 delay、 sys、 usart 等三个文件夹。分别包含了 delay.c、 sys.c、usart.c 及其头文件 delay.h,sys.h,usart.h。 


delay 文件夹代码介绍

delay 文件夹内包含了 delay.c 和 delay.h 两个文件,这两个文件用来实现系统的延时功能,其中包含 3 个函数:

void delay_init(u8 SYSCLK); //该函数用来初始化 2 个重要参数:fac_us 以及 fac_ms;同时把 SysTick 的时钟源选择为外部时钟

void delay_ms(u16 nms); // 该函数用来延时指定的 ms,其参数 nms 为要延时的微秒数

void delay_us(u32 nus);  // 该函数用来延时指定的 us,其参数 nus 为要延时的微秒数。

CM3 内核的处理器,内部包含了一个 SysTick 定时器, SysTick  是一个 24  位的倒计数定时器,当计到 0  时,将从 RELOAD  寄存器中自动重装载定时初值。只要不把它在 SysTick  控制及状态寄存器中的使能位清除,就永不停息。

下面我们开始介绍这几个函数。

 sys 文件夹代码介绍

sys 文件夹内包含了 sys.c 和 sys.h 两个文件。在 sys.h 里面定义了 STM32 的 IO 口输入读取宏定义和输出宏定义。 sys.c 里面只定义了一个中断分组函数。

IO 口的位操作实现

该部分代码在 sys.h 文件中,实现对 STM32 各个 IO 口的位操作,包括读入和输出。当然在这些函数调用之前,必须先进行 IO 口时钟的使能和 IO 口功能定义。此部分仅仅对IO 口进行输入输出读取和控制。 


  1.    //IO 口操作,只对单一的 IO 口!

  2.    //确保 n 的值小于 16!

  3.    #define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出

  4.    #define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入

  5.    #define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出

  6.    #define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入

  7.    #define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出

  8.    #define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入

  9.    #define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出

  10.    #define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入

  11.    #define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出

  12.    #define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入

  13.    #define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出

  14.    #define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //输入

  15.    #define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //输出

  16.    #define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n)

有了上面的代码,我们就可以像 51/AVR 一样操作 STM32 的 IO 口了。比如,我要 PORTA的第七个 IO 口输出 1,则可以使用 PAout(6)=1;即可实现。我要判断 PORTA 的第 15个位是否等于 1,则可以使用 if(PAin(14)==1)…;就可以了。

这里顺便说一下,在 sys.h 中的还有个全局宏定义:

//0,不支持 ucos

//1,支持 ucos

#define SYSTEM_SUPPORT_UCOS    0    //定义系统文件夹是否支持 UCOS

SYSTEM_SUPPORT_UCOS,这个宏定义用来定义 SYSTEM 文件夹是否支持 ucos,如果在 ucos 下面使用 SYSTEM 文件夹,那么设置这个值为 1 即可,否则设置为 0(默认)。

usart 文件夹介绍

usart 文件夹内包含了 usart.c 和 usart.h 两个文件。这两个文件用于串口的初始化和中断接收。这里只是针对串口 1,比如你要用串口 2 或者其他的串口,只要对代码稍作修改就可以了。usart.c 里面包含了 2 个函数一个是 void USART1_IRQHandler(void);另外一个是void uart_init(u32 bound);里面还有一段对串口 printf 的支持代码,如果去掉,则会导致 printf无法使用,虽然软件编译不会报错,但是硬件上 STM32 是无法启动的,这段代码不要去修改。

printf 函数支持printf 函数向串口发送我们需要的内容,方便开发过程中查看代码执行情况以及一些变量值。

uart_init 函数函数是串口 1 初始化函数。该函数有 1 个参数为波特率

void  USART1_IRQHandler(void)函数是串口 1 的中断响应函数,当串口 1 发生了相应的中断后,就会跳到该函数执行。


关键字:STM32  固件库  SYSTEM 引用地址:STM32固件库SYSTEM 文件夹介绍

上一篇:STM32 波形
下一篇:STM32 通用定时器

推荐阅读最新更新时间:2024-11-13 07:17

如何入坑STM32 STM32为何能在单片机中脱颖而出
在STM32之前,都是老大头51,带着它的“小弟们” MSP430、AVR、PIC在单片机界呼风唤雨。 那个时候,市场上遍布8位机,大学教材用51入门,个人、企业学单片机基本上也都在用51。 虽然AVR也有一些8位机市场,但与stc带领下的51单片机是完全不能相比的。 当然,这个时候也有16位机的msp430,其他厂家单片机还有pic,高端嵌入式处理器等市场有arm7、arm9等。 这个时期的单片机市场是百花齐放、百家争鸣,但总体来说,还是势均力敌、一片祥和的。 那么,这个局势是从什么时候开始打破的呢?这还得从物联网的崛起说起。 原因 当时,物联网(Internet of Things,IoT)逐步进入人们的视野范围。随着它的
[单片机]
如何入坑<font color='red'>STM32</font> <font color='red'>STM32</font>为何能在单片机中脱颖而出
晶振损坏了,STM32还能正常运行?
问题: 该问题由某客户提出,发生在STM32F103VDT6器件上。据其工程师讲述:在其产品的设计中,STM32的HSE外接8MHz的晶体产生振荡,然后通过STM32内部的PLL倍频到72MHz,作为STM32的系统时钟,驱动芯片工作。在STM32片外有专用的看门狗芯片,监控STM32的运行。STM32内部的软件会在STM32的某个管脚上产生脉冲来复位看门狗。一旦STM32没有及时的产生脉冲来复位门狗,则看门狗会认为STM32运行不正常,从而复位STM32。在对该产品做可靠性测试时,进行了对看门狗监控时钟失效能力的测试。 测试的方法是:将HSE外接的晶体的两个端子接地,使其停止振荡,从而验证看门狗能否做出对STM32的做出复位
[单片机]
晶振损坏了,<font color='red'>STM32</font>还能正常运行?
STM32 F1配置外部晶振
当外部晶振配置错误时,会导致串口乱码,这是描述从 默认的8M晶振改成12M 改晶振方法如下 1. 修改外部高速晶振值 stm32f10x.h 修改前 #define HSE_VALUE ((uint32_t)8000000) /*! Value of the External oscillator in Hz */ 修改后 #define HSE_VALUE ((uint32_t)12000000) /*! Value of the External oscillator in Hz */ 2.修改PLL配置 system_stm32f10x.c 修改前 RCC- CFGR |= (uint32_t)(RCC_CF
[单片机]
STM32例程之USB HID双向数据传输
程序功能 将STM32的USB枚举为HID设备。 STM32使用3个端点,端点0用于枚举用,端点1和2用于数据的发送和接收。 端点长度为64,也就是单次最多可以传输64个字节数据。 STM32获取上位机下发的数据并将该数据通过USB原样返回,同时将数据打印输出。 上位机程序通过调用windows的API实现对HID设备的读写控制。 USB接口原理图: HID枚举成功: 程序效果图 图一 上位机程序运行图 图二 STM32串口打印输出 图三 Bus Hound抓取的数据 程序部分代码 STM32的报告描述符: const uint8_t CustomHID_ReportDescriptor = { 0
[单片机]
9. STM32的时钟系统
一。 时钟系统框图讲解 1. STM32的5个时钟源 a。高速内部时钟 HSI,大约为8MHz b。高速外部时钟 HSE,晶振取值范围在4M--16M,一般采用8M晶振 c。低速外部时钟 LSE,32.768k晶振,可以作为RTC的时钟源 d。低速内部时钟 LSI,大约为40KHz e。PLL锁相环时钟 2. 系统时钟 系统时钟SYSCLK的3个来源 a。HSI b。HSE c。PLL 3. RTC的时钟来源 a。LSE b。LSI c。LSE的128分频 4. 独立看门狗IWDGCLK的时钟来源 LSI 5.USB的时钟USBCLK的来源 最大频率为48MHz PLL经过预分频器产生1或1.5分频 6. 内部时钟输出MCO,
[单片机]
9. <font color='red'>STM32</font>的时钟系统
STM32—数组作为被调用函数的入口参数时定义成指针
STM32—数组作为被调用函数的入口参数时,要两个条件, 1:数组首地址 2:数组长度 在被调用函数中,比如把数据保存到数组pbuffer 中,那么在入口参数定义时要定义成指针u8 *pbuffer, 1 而在调用时,比如要保存到tab 中,要在入口参数处强制转换成(u8 *)tab,
[单片机]
<font color='red'>STM32</font>—数组作为被调用函数的入口参数时定义成指针
stm32中定时器中断的套路
首先要提到的是,在stm32中,定时器相关的库函数主要集中在固件库文件 stm32f10x_tim.h 和 stm32f10x_tim.c 文件中,所以在进行定时器方面的处理时,需要加载这两个文件进来。在进行定时器操作时,一般按如下步骤来进行: 1、打开相关外设的时钟。以定时器TIM3为例,由stm32的时钟树可以看到,TIM3时钟挂接在APB1上面,所以打开TIM3时钟时使用RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE),如果其中还使用到了其他外设,如GPIO等,再打开相关的外设时钟就可以了。 2、清除中断挂起位。由于各种不可知的因素作用,在程序运行前要操
[单片机]
stm32之RTC
1、stm32f10x_it.c文件 /******************************************************************************* * Function Name : RTC_IRQHandler RTC中断 * Description : * Input : None * Output : None * Return : None *******************************************************************************/ extern volatile bool S
[单片机]
<font color='red'>stm32</font>之RTC
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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