stm32f103c8t6库函数例程
时间: 2023-04-26 08:04:01 浏览: 404
好的,下面是一个基于STM32F103C8T6的库函数示例程序,实现了延时函数和LED闪烁功能:
```
#include "stm32f10x.h"
#include "delay.h"
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
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);
}
int main(void)
{
GPIO_Configuration();
while(1)
{
GPIO_SetBits(GPIOC, GPIO_Pin_13);
delay_ms(500);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
delay_ms(500);
}
}
```
同时,需要包含以下头文件:
```
#include "stm32f10x.h"
#include "delay.h"
```
其中,delay.h文件的内容如下:
```
#ifndef __DELAY_H
#define __DELAY_H
void delay_init(void);
void delay_ms(uint16_t nms);
void delay_us(uint32_t nus);
#endif
```
delay.c文件的内容如下:
```
#include "delay.h"
static uint32_t fac_us=0;
static uint32_t fac_ms=0;
void delay_init(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
fac_us = SystemCoreClock / 8000000;
fac_ms = (uint16_t)fac_us*1000;
}
void delay_us(uint32_t nus)
{
uint32_t ticks;
uint32_t told, tnow, tcnt = 0;
uint32_t reload = SysTick->LOAD;
ticks = nus*fac_us;
tcnt = 0;
told = SysTick->VAL;
while (1)
{
tnow = SysTick->VAL;
if (tnow != told)
{
if (tnow<told)tcnt += told - tnow;
else tcnt += reload - tnow + told;
told = tnow;
if (tcnt >= ticks)break;
}
};
}
void delay_ms(uint16_t nms)
{
uint32_t i;
for (i = 0; i<nms; i++) delay_us(1000);
}
```
这个示例程序实现了在PC13引脚上通过控制电平实现LED的闪烁,每次延迟500ms。同时,利用delay.c中的延时函数实现了延时功能。需要注意的是,使用delay.c中的延时函数前,需要先调用delay_init()函数进行初始化。
阅读全文