STM32F103 SysTick定时器在VC++和Keil中的应用实现

版权申诉
0 下载量 175 浏览量 更新于2024-10-12 收藏 43KB RAR 举报
资源摘要信息:"基于stm32f103的systick程序 可以实现计数和定时 在VC++和KEIL uVision4中执行 并下载到JTAG中实现功能" 知识点: 1. STM32F103: 这是一种基于ARM Cortex-M3处理器的高性能微控制器,广泛应用于嵌入式系统中。其具有丰富的外设接口,低功耗设计,以及高性能的处理能力,非常适合于需要复杂控制算法和高速处理能力的应用。 2. Systick: Systick是STM32F103中的一种硬件定时器,主要用于实现操作系统的时序功能,如实现任务切换、时间管理等。Systick是一个简单的递减计数器,当计数器减到0时,会触发一个中断。然后计数器会重新加载一个固定的值(通常是系统时钟的1/8),并继续计数。 3. 计数和定时: 在嵌入式系统中,计数和定时是两个非常重要的功能。计数可以用于测量时间间隔,定时可以用于执行周期性任务,如定时检查传感器数据。 4. VC++: VC++是微软推出的一款集成开发环境,主要用于C++语言的开发。它具有强大的代码编辑、编译、调试功能,是许多专业程序员的首选开发工具。 5. KEIL uVision4: KEIL uVision4是一款由KEIL公司开发的集成开发环境,主要用于嵌入式系统的开发。它支持多种微控制器,具有代码编辑、编译、调试等功能,同时提供了丰富的外设驱动和库函数,大大提高了开发效率。 6. JTAG: JTAG(Joint Test Action Group)是一种国际标准测试协议,主要用于芯片的测试和编程。在嵌入式系统开发中,JTAG主要用于程序的下载和调试。 7. 程序下载: 程序下载是指将编写好的程序代码下载到微控制器中,使其能够执行。在嵌入式系统开发中,程序下载通常需要使用特定的工具,如JTAG。 8. 中断: 中断是计算机系统中一种重要的同步机制。当某个事件发生时,CPU暂停当前任务,转而执行与该事件相关的处理程序,处理完毕后再恢复之前的任务。在STM32F103中,Systick中断就是当计数器减到0时触发的中断。 9. VC++和KEIL uVision4的使用: 在VC++和KEIL uVision4中执行程序,需要首先配置好开发环境,包括选择正确的微控制器型号,配置编译器参数,设置调试接口等。然后编写代码,编译,调试,直到程序运行正确。 10. 程序实现功能: 程序的最终目标是实现特定的功能。对于基于STM32F103的Systick程序,其主要功能是实现计数和定时,这在许多嵌入式系统中都是非常有用的功能。
2023-07-12 上传

为下面每一行代码添加注释:#include "stm32f10x.h" void RCC_Configuration(void) { /* Enable GPIOA, GPIOC and AFIO clocks / RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); / Enable SYSCFG clock / RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; / Configure PA0 pin as input floating / GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); / Configure PC13 pin as output push-pull / GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); } void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure / Configure the NVIC Preemption Priority Bits / NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); / Enable the EXTI0 Interrupt / NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; / Configure EXTI Line0 to generate an interrupt on falling edge / EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); / Connect EXTI Line0 to PA0 pin / GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); } void SysTick_Configuration(void) { / Configure SysTick to generate an interrupt every 1ms / if (SysTick_Config(SystemCoreClock / 1000)) { / Capture error / while (1); } } void Delay(__IO uint32_t nTime) { / Wait for nTime millisecond / TimingDelay = nTime; while (TimingDelay != 0); } void TimingDelay_Decrement(void) { if (TimingDelay != 0x00) { TimingDelay--; } } int main(void) { RCC_Configuration(); GPIO_Configuration(); NVIC_Configuration(); EXTI_Configuration(); SysTick_Configuration(); / Infinite loop / while (1) { / Toggle PC13 LED every 500ms / GPIOC->ODR ^= GPIO_Pin_13; Delay(500); } } void EXTI0_IRQHandler(void) { / Check if PA0 button is pressed / if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == RESET) { / Reset MCU / NVIC_SystemReset(); } / Clear EXTI Line0 pending bit */ EXTI_ClearITPendingBit(EXTI_Line0); }

2023-06-03 上传
2023-07-15 上传
2023-05-24 上传