STM32F072RB 实作笔记(三)- Main.c 的模板分析

发布者:TranquilSoul最新更新时间:2022-07-22 来源: csdn关键字:Main 手机看文章 扫描二维码
随时随地手机看文章

Main.c 的模板有什么内容?

我已经把程式上传,有兴趣,可以在这里找到! 档案位置.

下面的程式是main.c的内容的逐段分解:


/**   Project name : CSDN 

*   

--------------------------------------------------------------------------------------*/


要养成写注解的习惯,标题、重要事项都要写出来


#include


#include "stm32f0xx.h"          // File name depends on device used

#include "RTE_Components.h"      // Component selection 


以上三个是在设置Device 和 Packs 的时候准备好,我们再 include进来


extern void stdout_init (void);


这个就是与 Compiler 设定 I/O 的时候,选 User 的项目有关。


volatile uint32_t msTicks;         // Counter for millisecond Interval


#define NUM_KEYS  1                     /* Number of available keys           */


/* Keys for NUCLEO Board */

#define USER    1


以上三是这片开发板上的部分硬件功能的应用设定,其中msTicks 要关注一下,了解这个参数对哪些方面有影响!


/*--------------------------------------------------------------------------------*/

// SysTick Interrupt Handler

/*--------------------------------------------------------------------------------*/

void SysTick_Handler (void) 

{       

    msTicks++;           // Increment Counter

}


/*--------------------------------------------------------------------------------*/

// Delay: delay a number of Systicks

/*--------------------------------------------------------------------------------*/

void Delay(uint32_t dlyTicks){

uint32_t currentTicks;

currentTicks = msTicks;

while( (msTicks - currentTicks) < dlyTicks ){

  __NOP();

}

}


Delay() 功能,利用 1000分之一秒的计时中断值 msTicks,做 ms 级的时间延迟。


/**-----------------------------------------------------------------------------

  * @brief  Configures the System clock frequency, AHB/APBx prescalers and Flash

  *         settings.

  * @note   This function should be called only once the RCC clock configuration

  *         is reset to the default reset state (done in SystemInit() function).

  * @param  None

  * @retval None

--------------------------------------------------------------------------------  */

static void SetSysClock(void)

{

SystemCoreClock = 48000000;

  /* SYSCLK, HCLK, PCLK configuration ----------------------------------------*/


  /* At this stage the HSI is already enabled */


  /* Enable Prefetch Buffer and set Flash Latency */

  FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;

 

  /* HCLK = SYSCLK */

  RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

      

  /* PCLK = HCLK */

  RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;


  /* PLL configuration = (HSI/2) * 12 = ~48 MHz */

  RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL));

  RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI_DIV2 | RCC_CFGR_PLLMUL12);

            

  /* Enable PLL */

  RCC->CR |= RCC_CR_PLLON;


  /* Wait till PLL is ready */

  while((RCC->CR & RCC_CR_PLLRDY) == 0)

  {

  }


  /* Select PLL as system clock source */

  RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));

  RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    


  /* Wait till PLL is used as system clock source */

  while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)

  {

  }

}


上面是时间中断,几个地方要注意

1.当自己另外写了时间中断程式时,要注意有没有和这个程式打架的地方。

2. SystemCoreClock = 48000000; 这里的 48M 和前面系统设定时 写的 48.0 M有密切。

在这里插入图片描述

/*--------------------------------------------------------------------------------*/

// Button_Init(void)        ;Initialize button

// PC.13 to control User botton, set PC.13 is input pin 

/*--------------------------------------------------------------------------------*/

void Button_Init(void) {


  RCC->AHBENR |=  (1ul << 19);                  // Enable GPIOC clock       

  GPIOC->MODER &= ~(3ul << 2*13);               // Set PC.13 is input  

   

}


/*------------------------------------------------------------------------------*/

//uint32_t Button_GetState(void)

// Get USER button (PC.13) state

// return: 1 means USER key pressed

/*------------------------------------------------------------------------------*/

uint32_t Button_GetState (void) {


  uint32_t val = 0;


  if ((GPIOC->IDR & (1ul << 13)) == 0) {         //When USER button pressed PC.13=0

    val |= USER;                                 // set USER button pressed

  }

  return (val);


}


这片开发板上有两个LED 和一个蓝色的按键,是由上面的程式设定执行的,可以直接使用。

在这里插入图片描述

---------------------------------------------

在Main(void) 前面开始写Function,容易查找。

---------------------------------------------

/*--------------------------------------------------------------------------------*/

// The processor clock is initialized by CMSIS startup + system file

/*--------------------------------------------------------------------------------*/

int main (void) {        // User application starts here

/* Configure the System clock frequency, AHB/APBx prescalers and Flash settings */

  SetSysClock();

stdout_init();              // Initialize USART 2(PA3 to USART2_RX,PA2 to USART2_TX)  

                                            

SysTick_Config(SystemCoreClock/1000);      // System Tick Initializes,set SysTick 1ms interrupt

/****************

*从这里开始写主程式

    **

   *******************/

}


SetSysClock();

stdout_init();

SysTick_Config(SystemCoreClock/1000);

这三个功能在主程式一开始就执行。

然后,再把自己要的程式接在后面。


下次开始写程式。

关键字:Main 引用地址:STM32F072RB 实作笔记(三)- Main.c 的模板分析

上一篇:STM32F072RB 实作笔记(四)- GPIO的基础设定技法, 一个LED点亮程式
下一篇:STM32F072RB 实作笔记(二)- 第一次启动 Keil 编写 C 语言

推荐阅读最新更新时间:2024-11-09 01:19

S3C2440的中断
中断源发生中断,此信号自动被挂起PEND,自动被屏蔽 MASK S3C2440一共有60个中断源,其中有15个子中断源,它们与SUBSRCPND寄存器中的每一位相对应,其他45个中断源与SRCPND中的每一位相对应。要注意的是EINT4~7对应的是同一位SRCPND ,而EINT8~23对应的也是SRCPND 一位。 1 S3C2440的中断寄存器 中断分两大类:外部中断和内部中断。 1.1 外部中断寄存器 24个外部中断占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用这些脚做中断输入,则必须配置引脚为中断,并且不要上拉。具体可参考datesheet
[单片机]
S3<font color='red'>C</font>2440的中断
#C51串口通讯3-#一串数据#中断即时解析用户自定义协议
前言 1.上一章(中断定时+超时接收)的逻辑,适用于协议较为复杂的情况,即中断判断接收结束,数据放置缓冲区,主函数中解析数据。 2.实际开发中,用户自定义协议的帧头是可预见的,包括数据长度等。 3.本章测试使用中断即时解析自定义协议 提示:以下是本篇文章正文内容,下面案例可供参考 一、场景 示例一串数据:固定帧头区(AA 66 AA )+数据类型(01/02)+数据区+和校验+异或校验 其中,01LED,02蜂鸣器 ,数据区为工作时间,低位在前高位在后 二、编程实现 1.知识点 a.“状态机”的算法思想 状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。 包括:State(状态)、Event(事件)、
[单片机]
#<font color='red'>C</font>51串口通讯3-#一串数据#中断即时解析用户自定义协议
89c51单片机的复位电路,89c51复位电路图详解
  复位电路的目的就是在上电的瞬间提供一个与正常工作状态下相反的电平。一般利用电容电压不能突变的原理,将电容与电阻串联,上电时刻,电容没有充电,两端电压为零,此时,提供复位脉冲,电源不断的给电容充电,直至电容两端电压为电源电压,电路进入正常工作状态。   这篇文章我们就一起来了解一下关于89C51单片机的复位电路方面的消息,希望可以给你带来惊喜。   89c51复位电路图详解   复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。   图1所示的RC复位电路可以实现上述基本功能,图
[单片机]
89<font color='red'>c</font>51单片机的复位电路,89<font color='red'>c</font>51复位电路图详解
CKS32F103C8T6最小系统板调试记录——SWD下载
cks32f103是国产芯片,由中科芯研发,比起ST公司F103多了一个刹车功能 它有keil的器件安装包,支持keil的开发。 下载方式是:SWD方式 连接图 STLINK 烧写器引脚定义. 备注: 检查TVCC引脚是否有电压,如果没有电压就就外部引入供电线(如usb供电) 或者将ST-link v2 的19脚接回系统板的V3.3引脚 一定要接TVCC!
[单片机]
CKS32F103<font color='red'>C</font>8T6最小系统板调试记录——SWD下载
S3C2440各类端口操作函数简介
micro2440采用S3C2440处理器(和S3C2410区别不大),在其Linux源码中,和这个平台相关的代码主要在arch/arm/mach-s3c2410和include/asm-arm/arch-s3c2410中,相关驱动在drivers目录中。 (1)DM9000网卡驱动 kernel-2.6.13/drivers/net/dm9000x.c (2)串口(包括三个串口驱动0,1,2,对应设备名/dev/tts/0,1,2) kernel-2.6.13/drivers/serial/s3c2410.c (3)实时时钟RTC驱动 kernel-2.6.13/drivers/char/s3c2410-rtc.c (4)L
[单片机]
89C51单片机结构框图
89C51单片机结构框图 1、一个8位 的微处理器CPU。 2、片内数据存储器(RAM128B/256B):用以存放可以读/写的数据,如运算的中间结果、最终结果以及欲显示的数据等。 3、片内4kB程序存储器Flash ROM(4KB):用以存放程序、一些原始数据和表格。 4、四个8位并行I/O(输入/输出)接口 P0~P3:每个口可以用作输入,也可以用作输出。 5、两个或三个定时/计数器:每个定时/计数器都可以设置成计数方式,用以 对 外部事件进行计数,也可以设置成定时方式,并可以根据计数或定时的结果 实现计算机控制 6、一个全双工UART的串行I/O口:可实现单片机与单片机或其它微机之间串行通信。 7、片内振荡器和时钟产生电
[单片机]
89<font color='red'>C</font>51单片机结构框图
STM32F103C8T6驱动WS2812b灯条
几天小朋友到别人家玩,看上了人家的金鱼,人家就给了她一条小金鱼,有了小金鱼,怕它没氧气挂掉,买了一个氧气泵,没有东西喂它也不行,又买了一包鱼料,又因为它太孤单了,又买了几条小金鱼给它做伴,几条小金鱼老是在水桶里不怎么好看,又去买了个鱼缸,有了鱼缸太单调了,也不太好看,想了想加点灯光,后来找出吃灰多年的老灯条——WS2812b。 这个灯条以前使用新唐的N76E0003单片机驱动过,这款单片机是51内核的,之前驱动也没什么问题,今天使用stm32f103c8tc6来驱动,有了新的发现,首先来说一下ws2812b的驱动原理,直接上图好了。 驱动它很简单,驱动一个灯的话,给它发24位数据就行了。 新发现是:stm32f103是72M
[单片机]
STM32F103<font color='red'>C</font>8T6驱动WS2812b灯条
S3C6410裸机 - 外部中断程序
一、外部中断分组: 外部中断组0 GROUP0 GPN0--GPN15 GPL8--GPL14 GPM0--GPM4 外部中断组1 GROUP1 GPA0--GPA7 GPB0--GPB6 外部中断组2 GROUP2 GPC0--GPC7 外部中断组3 GROUP3 GPD0--GPD5 外部中断组4 GROUP4 GPF0--GPF14 外部中断组5 GROUP5 GPG0--GPG7 外部中断组6 GROUP6 GPH0--GPH9 外部中断组7 GROUP7 GPO0--GPO15 外部中断组8 GROUP8 GPP0--GPP14 外部中断组9 GROUP9 GPQ0--GPQ9
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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