定时器中段发送数据到上位机

步骤:

1、使能TIM3时钟

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

2、初始化定时器TIM3

    TIM_TimeBaseInitStru.TIM_ClockDivision=TIM_CKD_DIV1;
    TIM_TimeBaseInitStru.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseInitStru.TIM_Period=arr;//自动重装载值
    TIM_TimeBaseInitStru.TIM_Prescaler=psc;//预分频系数
    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStru);//初始化定时器TIM3

3、设置定时器中断

    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//设置定时器中断,更新中断

4、初始化NVIC

5、使能定时器3

    TIM_Cmd(TIM3,ENABLE

6、定时器中断函数

    void TIM3_IRQHandler()
{
    u8 t;
    if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
    {
        LED0=!LED0;
//        USART_ClearITPendingBit(USART1,USART_IT_RXNE);
        printf("\r\n定时器中断自动发送的数据为:\r\n");
        for(t=0;t<5;t++)
            {
                USART1->DR=USART_RX_BUF[t];
                while((USART1->SR&0X40)==0);//等待发送结束
            }
            printf("\r\n");
        //    printf("定时器中断自动发送的值1为:%d  \r\n",USART_RX_BUF[0]);
        //    printf("定时器中断自动发送的值2为:%d  \r\n",USART_RX_BUF[1]);
        //    printf("定时器中断自动发送的值3为:%d  \r\n",USART_RX_BUF[2]);
        //    printf("定时器中断自动发送的值3为:%d  \r\n",USART_RX_BUF[3]);
        //    printf("定时器中断自动发送的值3为:%d  \r\n",USART_RX_BUF[4]);
    }
    TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}

 

主函数:

int main()
{
    u8 t,i,len;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组
    delay_init(168);
    uart_init(115200);//初始化串口波特率为115200
    LED_Init();
    TIM3_Int_Init(30000-1,8400-1);//定时器时钟84M,分频系数8400,计数频率84M/8400=10KHz,计数50000次为5000ms
//    LED0=0;//先点亮红灯
    while(1)
    {
        if(USART_RX_STA&0x8000)
        {
            len=USART_RX_STA&0x3FFF;//得到此次接受数据的长度
            printf("\r\n发送的数据为:\r\n");
            for(t=0;t             {
                USART1->DR=USART_RX_BUF[t];
                while((USART1->SR&0X40)==0);//等待发送结束
            }
            printf("\r\n");
            printf("接收数据的值1为:%d  ",USART_RX_BUF[0]);
            printf("接收数据的值2为:%d  ",USART_RX_BUF[1]);
            printf("接收数据的值3为:%d  ",USART_RX_BUF[2]);
            if(USART_RX_BUF[0]=='0')
            {
                LED1=1;
            }else if(USART_RX_BUF[0]=='1')
            {
                LED1=0;
            }
        //    for(i=0;i         //    {
        //        USART_RX_BUF[i]=0;
        //    }
            USART_RX_STA=0;
        }
        //else
        //{
        //    delay_ms(1000);
        //    printf("\r\n上位机还未发送数据到单片机\r\n");
        //}    
    }
}
 

 

注意:

定时发送时间的设置,定时周期的求法

下一节内容:上位机开发,基于WinForm的串口通讯软件:实现串口调试、上位机控制、实时将单片机传送来的数据保存到sqlserver中

你可能感兴趣的:(定时器中段发送数据到上位机)