栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

bsp

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

bsp

#include "bsp_driver_GeneralTim.h" 
#include "bsp_led.h"
#include 
#include "./usart/bsp_usart.h"

static uint32_t s_time_count1;
static uint32_t s_time_count2;
static uint8_t s_timer50ms_flag;
static uint8_t s_timer1000ms_flag;


void BSP_GeneralTim2_Init(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);	// 设置中断组为0	
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn ;//全局中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;// 设置主优先级为 0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;// 设置抢占优先级为1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;		
    RCC_APB1PeriphClockCmd(GENERAL_TIM_CLK, ENABLE);// 开启定时器时钟,即内部时钟CK_INT=72M	
    TIM_TimeBaseStructure.TIM_Period=GENERAL_TIM_Period;// 自动重装载寄存器的值
    TIM_TimeBaseStructure.TIM_Prescaler= GENERAL_TIM_Prescaler;	 // 时钟预分频数
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;// 时钟分频因子 
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 计数器计数模式,设置为向上计数		
		TIM_TimeBaseStructure.TIM_RepetitionCounter=0;		// 重复计数器的值
    TIM_TimeBaseInit(GENERAL_TIM, &TIM_TimeBaseStructure);// 初始化定时器
    TIM_ClearFlag(GENERAL_TIM, TIM_FLAG_Update);
    TIM_ITConfig(GENERAL_TIM,TIM_IT_Update,ENABLE);
}


void BSP_GeneralTim3_Init(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);	// 设置中断组为0	
    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn ;//全局中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;// 设置主优先级为 0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;// 设置抢占优先级为2
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;		
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);// 开启定时器时钟,即内部时钟CK_INT=72M	
    TIM_TimeBaseStructure.TIM_Period= (50000-1);// 自动重装载寄存器的值
    TIM_TimeBaseStructure.TIM_Prescaler= 71;	 // 时钟预分频数
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;// 时钟分频因子 
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 计数器计数模式,设置为向上计数		
	TIM_TimeBaseStructure.TIM_RepetitionCounter=0;		// 重复计数器的值
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);// 初始化定时器
    TIM_ClearFlag(TIM3, TIM_FLAG_Update);
    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
}


void Driver_GeneralTim2_Enable(void)
{
    TIM_Cmd(GENERAL_TIM, ENABLE);
}

void Driver_GeneralTim2_Disable(void)
{
    TIM_Cmd(GENERAL_TIM,DISABLE);
}

void Driver_GeneralTim3_Enable(void)
{
    TIM_Cmd(TIM3, ENABLE);
}

void Driver_GeneralTim3_Disable(void)
{
    TIM_Cmd(TIM3,DISABLE);
}


void TIM2_IRQHandler(void)
{
	if ( TIM_GetITStatus( GENERAL_TIM, TIM_IT_Update) != RESET ) 
	{	        
        s_time_count1++;
        if (s_time_count1 > 49)
        {
            s_time_count1 = 0;     
			s_timer50ms_flag = true;
        }       
        TIM_ClearITPendingBit(GENERAL_TIM , TIM_FLAG_Update);
	}		 	
}


void TIM3_IRQHandler(void)
{
	if ( TIM_GetITStatus( TIM3, TIM_IT_Update) != RESET ) 
    {
        s_time_count2++;
        if (s_time_count2 > 19)
        {
            s_time_count2 = 0;
            s_timer1000ms_flag = true;
        }
        TIM_ClearITPendingBit( TIM3 , TIM_FLAG_Update);
	}		 	
}


uint8_t TIM_Get50ms_Status(void)
{
    return s_timer50ms_flag;
}


uint8_t TIM_Get1000ms_Status(void)
{
    return s_timer1000ms_flag;
}


void TIM_Clear50ms_flag(void)
{
    s_timer50ms_flag = false;
}


void TIM_Clear1000ms_flag(void)
{    
    s_timer1000ms_flag = false;	 	
}
#include "stm32f10x.h"
#include "bsp_led.h"
#include 
#include "bsp_driver_GeneralTim.h" 
#include "./usart/bsp_usart.h"

int main(void)
{
    uint32_t test_50ms_count;
	 
	LED_GPIO_Config();
	USART_Config();
    BSP_GeneralTim2_Init();
    BSP_GeneralTim3_Init();
    Driver_GeneralTim2_Enable();
    //Driver_GeneralTim2_Disable();
    Driver_GeneralTim3_Enable();
    test_50ms_count = 0;
    //Driver_GeneralTim3_Disable();
    while(1)
    {
        if (TIM_Get1000ms_Status() == true)
        {
            TIM_Clear1000ms_flag();
            LED1_TOGGLE;
        }
        if (TIM_Get50ms_Status() == true)
        {
            TIM_Clear50ms_flag();
            test_50ms_count++;
            if (test_50ms_count > 9)
            {
                test_50ms_count = 0;
                printf("定时50ms计时1秒rn");
            }
        }
    }
}

#ifndef __BSP_GENERALTIME_H
#define __BSP_GENERALTIME_H


#include "stm32f10x.h"


#define GENERAL_TIM2    1
#define GENERAL_TIM3    0
#define GENERAL_TIM4    0
#define GENERAL_TIM5    0

#if  GENERAL_TIM2
#define            GENERAL_TIM                   TIM2
#define            GENERAL_TIM_CLK               RCC_APB1Periph_TIM2
#define            GENERAL_TIM_Period            (1000-1)
#define            GENERAL_TIM_Prescaler         71
#define            GENERAL_TIM_IRQ               TIM2_IRQn

#elif  GENERAL_TIM3
#define            GENERAL_TIM                   TIM3
#define            GENERAL_TIM_CLK               RCC_APB1Periph_TIM3
#define            GENERAL_TIM_Period            (1000-1)
#define            GENERAL_TIM_Prescaler         71
#define            GENERAL_TIM_IRQ               TIM3_IRQn
#define            GENERAL_TIM3_IRQHandler        TIM3_IRQHandler

#elif   GENERAL_TIM4
#define            GENERAL_TIM                   TIM4
#define            GENERAL_TIM_CLK               RCC_APB1Periph_TIM4
#define            GENERAL_TIM_Period            (1000-1)
#define            GENERAL_TIM_Prescaler         71
#define            GENERAL_TIM_IRQ               TIM4_IRQn
#define            GENERAL_TIM_IRQHandler        TIM4_IRQHandler

#elif   GENERAL_TIM5
#define            GENERAL_TIM                   TIM5
#define            GENERAL_TIM_CLK               RCC_APB1Periph_TIM5
#define            GENERAL_TIM_Period            (1000-1)
#define            GENERAL_TIM_Prescaler         71
#define            GENERAL_TIM_IRQ               TIM5_IRQn
#define            GENERAL_TIM_IRQHandler        TIM5_IRQHandler

#endif


void BSP_GeneralTim2_Init(void);


void BSP_GeneralTim3_Init(void);


void Driver_GeneralTim2_Enable(void);

void Driver_GeneralTim2_Disable(void);


void Driver_GeneralTim3_Enable(void);


void Driver_GeneralTim3_Disable(void);


uint8_t TIM_Get50ms_Status(void);


uint8_t TIM_Get1000ms_Status(void);


void TIM_Clear50ms_flag(void);


void TIM_Clear1000ms_flag(void);


#endif	

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983021.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号