打印
[demo程序]

NV32F101无刷电机测试板_串口中断接收不定长数据

[复制链接]
1960|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eyancool|  楼主 | 2020-4-8 19:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/**
******************************************************************************
* 文件名程: nv32com.c
* 作    者: 东莞-邓凯哥
* 功    能: 通讯串口初始化
* 硬    件: NV32F101直流无刷电机测试板
* 说明:
* 软件版本 V1.0.1(2020/02/23 9:02)
******************************************************************************
**/

#include "nv32com.h"

/******************************************************************************
**函数信息 :RS232_config(void)            
**功能描述 :RS232通讯初始化  
**输入参数 :无
**输出参数 :无
******************************************************************************/
void RS232_Init()
{
               
        UART_ConfigType sConfig;
        sConfig.u32SysClkHz = BUS_CLK_HZ;                        //选择时钟源为总线时钟
        sConfig.u32Baudrate = 19200;                                //设置波特率

        UART_Init(UART1,&sConfig);                                        //初始化串口1
        UART_EnableRx(UART1);
        UART_EnableRxBuffFullInt(UART1);
        NVIC_SetPriority(UART1_IRQn,0);       
        NVIC_EnableIRQ(UART1_IRQn);
}
/******************************************************************************
**函数信息 :UART1_SendInt(uint8_t data[], uint32_t len)           
**功能描述 :串口1中断方式发送数据   
**输入参数 :data[]:数据 len:数据长度
**输出参数 :无
******************************************************************************/
uint8_t * u1UART_TXBuffer = 0;
uint32_t  u1UART_TXCount  = 0,
          u1UART_TXIndex  = 0;
uint8_t   u1Readtime,u1Rxcounter,u1ReceBuf[128];
void UART1_SendInt(uint8_t data[], uint32_t len)
{
        u1UART_TXBuffer = data;
        u1UART_TXCount  = len;
        u1UART_TXIndex  = 0;
       
        UART_EnableTxBuffEmptyInt(UART1);
}

/******************************************************************************
**函数信息 :RS232_SendData(uint8_t data[], uint32_t len)   
**功能描述 :RS232发送数据   
**输入参数 :data[]:数据 len:数据长度
**输出参数 :无
******************************************************************************/
void RS232_SendData(uint8_t data[], uint32_t len)       
{
        UART1_SendInt(data,len);
}


#ifndef __NV32COM_H
#define __NV32COM_H         
#include "NV101_uart.h"
#include "NV101_gpio.h"
#include "io_map.h"

extern uint8_t * u1UART_TXBuffer;
extern uint32_t  u1UART_TXCount,u1UART_TXIndex;
extern uint8_t   u1Readtime,u1Rxcounter,u1ReceBuf[128],u1SendBuf[128];

void RS232_Init(void);
void RS232_SendData(uint8_t data[], uint32_t len);       
#endif


/**
******************************************************************************
* 文件名程: nv32timer.c
* 作    者: 东莞-邓凯哥
* 功    能: ETM1定时器初始化
* 硬    件: NV32F101直流无刷电机测试板
* 说明:
* 软件版本 V1.0.1(2020/04/03 18:02)
******************************************************************************
**/

#include "nv32timer.h"
/******************************************************************************
**函数信息 :ETM1_TIMER_Init(void)
**功能描述 :ETM1定时器初始化   
**输入参数 :无
**输出参数 :无
******************************************************************************/
void ETM1_TIMER_Init()
{
        uint32_t        u32LoadValue0;   
    PIT_ConfigType  sPITConfig1;   
    PIT_ConfigType  *pPIT_Config1   =&sPITConfig1;
       
    u32LoadValue0   = (3000-1); //50us 中断一次 主频60M
  
         /* configure PIT channel 1, only enable ETMer */   
    pPIT_Config1->u32LoadValue      = u32LoadValue0;
    pPIT_Config1->bFreeze           = FALSE;   
    pPIT_Config1->bModuleDis        = FALSE;            /*!< enable PIT module */     
    pPIT_Config1->bInterruptEn      = TRUE;
    pPIT_Config1->bChainMode        = FALSE;
    pPIT_Config1->bETMerEn          = FALSE;                //关闭PIT1定时器

    PIT_Init(PIT_CHANNEL1, pPIT_Config1);
        NVIC_SetPriority(PIT_CH1_IRQn,0);
        PIT_ChannelClrFlags(1);                
}


#ifndef __NV32TIMER_H
#define __NV32TIMER_H         
#include "NV101_pit.h"


void ETM1_TIMER_Init(void);

#endif



/**
******************************************************************************
* 文件名程: main.c
* 作    者: 东莞-邓凯哥
* 功    能: 主程序
* 硬    件: NV32F101直流无刷电机测试板
* 说明:
* 软件版本 V1.0.1(2020/02/23 9:02)
******************************************************************************
**/
#include "common.h"
#include "nv32systick.h"
#include "nv32com.h"
#include "nv32timer.h"
#include "io_map.h"

/******************************************************************************
**函数信息 :int main(void)                  
**功能描述 :主函数入口
**输入参数 :无
**输出参数 :无
******************************************************************************/
int main (void)
{               
        Systick_Init(BUS_CLK_HZ/1000);
        RS485_Init();
        RS232_Init();
        ETM1_TIMER_Init();
        GPIO_PinInit(GPIO_PTE5, GPIO_PinOutput);                        //RUNLED
    while(1)
        {

        }

}


/******************************************************************************
**函数信息 :SysTick_Handler(void)                  
**功能描述 :SysTick中断入口
**输入参数 :无
**输出参数 :无
******************************************************************************/
uint32_t sTick;
void SysTick_Handler()
{
        delayTick++;
        sTick++;
        if(sTick==50)
        {
                RUNLED_TOGGLE();
                sTick=0;
        }
}


/******************************************************************************
**函数信息 :UART1_IRQHandler (void)                  
**功能描述 :UART1中断入口   RS232通讯
**输入参数 :无
**输出参数 :无
******************************************************************************/
void UART1_IRQHandler()
{       
        if(UART1->S1 & UART_S1_RDRF_MASK)
        {       
                u1Readtime=0;                       
                PIT_ChannelEnable(PIT_CHANNEL1);
                u1ReceBuf[u1Rxcounter++]=UART1->D;
        }

        if(UART1->S1 & UART_S1_TDRE_MASK)
        {
                if(u1UART_TXIndex < u1UART_TXCount)
                        {
                                UART_WriteDataReg(UART1, u1UART_TXBuffer[u1UART_TXIndex]);               
                                u1UART_TXIndex++;
                        }
                        else
                        {
                                UART_DisableTxBuffEmptyInt(UART1);                                                                                       
                        }                  
        }
       
}

/******************************************************************************
**函数信息 :PIT_CH1_IRQHandler (void)                  
**功能描述 :PIT1中断入口
**输入参数 :无
**输出参数 :无
*****************************************************************************/
void PIT_CH1_IRQHandler(void)
{
        u1Readtime++;
        if(u1Readtime==35)
        {       
                PIT_ChannelDisable(PIT_CHANNEL1);
                RS232_SendData(u1ReceBuf, u1Rxcounter);
                u1Rxcounter=0;
                u1Readtime=0;       
        }
        PIT_ChannelClrFlags(1);
}

使用特权

评论回复

相关帖子

沙发
eyancool|  楼主 | 2020-4-8 19:40 | 只看该作者
Keil工程文件

NV32F101_BLDC串口中断接收不定长数据.zip

172.94 KB

使用特权

评论回复
板凳
tjx0512| | 2020-4-11 16:36 | 只看该作者
这个一定要支持下!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

106

帖子

4

粉丝