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); 这三个功能在主程式一开始就执行。 然后,再把自己要的程式接在后面。 下次开始写程式。
上一篇:STM32F072RB 实作笔记(四)- GPIO的基础设定技法, 一个LED点亮程式
下一篇:STM32F072RB 实作笔记(二)- 第一次启动 Keil 编写 C 语言
推荐阅读最新更新时间:2024-11-09 01:19
设计资源 培训 开发板 精华推荐
- FlyingRC-F4swamp-V1.0
- 使用 Alpha and Omega Semiconductor 的 AOZ2261QI-17 的参考设计
- YuzukiTF TF卡读卡器
- 飞思卡尔智能车CCD程序
- LTM4647EY 6V 至 15V 输入、1.0V 输出和 60A 设计的典型应用电路
- LTC2945IMS-1 在 -48V 恶劣环境中进行电源监控的典型应用,使用 INTVCC 并联稳压器来承受 200V 瞬态
- NCV302LSN30T1 3V电压检测器带丢失脉冲检测器或频率检测器的典型应用
- LT3091HT7 线性稳压器的典型应用,使用较低值的 RSET 以实现较高的输出电压
- ADR5045B 5V 精密微功率可调电压源的典型应用
- _蓝桥杯嵌入式设计与开发