打印
[MM32软件]

灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据

[复制链接]
295|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LEDyyds|  楼主 | 2024-10-30 14:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 LEDyyds 于 2024-10-30 14:46 编辑

目录:
1、MM32F0010UART简介
2、MM32F0010UART特性
3、MM32F0010使用UART2的注意事项
4、MM32F0010UART中断接收的初始化配置
5、MM32F0010UART中断接收函数的编写
6、MM32F0010UART查询方式发送数据函数的编写
7、MM32F0010UART处理接收数据函数的编写

文章出处:https://www.cnblogs.com/armny3264-lcpj/p/MM32F0010_UART1_UART2_Interruupt_Recv_Config.html

使用特权

评论回复
沙发
LEDyyds|  楼主 | 2024-10-30 14:38 | 只看该作者
1、MM32F0010UART简介:
  MM32F0010的通用异步收发器 (UART) 提供了一种灵活的方法与使用工业标准 NRZ 异步串行数据格式的外部设备之间进行全双工数据交换。UART 利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信。
2、MM32F0010UART特性:
• 支持异步方式下 RS-232S 协议,符合工业标准 16550
• 全双工异步操作
• 分数波特率发生器系统
• 发送和接收共用的可编程波特率
• 单独分开的发送和接收缓冲寄存器
• 内置 1 字节发送和 1 字节接收缓冲
• 发送和接收数据低位在前
• 一个起始位开始,后面接数据位,输出的数据长度可为 5 位、6 位、7 位、8 位,最后为
停止位。另外可选择是否有加奇偶校验位,奇偶校验位在数据位之后停止位之前。
• 第 9 位可做同步帧配置
• 支持硬件奇数或者偶数校验产生和侦测
• 线断开产生和侦测
• 线空闲产生和侦测
• 支持 LIN 协议下收发 brk
• 支持信号收发互换,接收和发送取反
• 支持波特率自适应功能
• 支持下面中断源:
– 发送端 BUFFER 空
– 接收端数据有效
– 接收缓冲缓存溢出
– 帧错误
– 奇偶校验错误
– 接收断开帧
– 发送移位寄存器完成
– 发送断开帧完成
– 接收同步帧
– 空闲帧完成
– 自动波特率结束
– 自动波特率错误
3、MM32F0010使用UART2的注意事项:
  注意:因PA13为SWD烧录口,MCU每次上电复位瞬间默认为SWD功能,如果用户把PA13复用成了UART2_RX功能,则在main函数中很快就被初始化成串口2的UART2_RX功能,导致来不及识别烧录时序,造成下次无法支持烧录代码,因此最好延时1s再复用为UART2_RX功能,让烧录器每次烧录时有足够的时间识别MCU的
烧录时序。

使用特权

评论回复
板凳
LEDyyds|  楼主 | 2024-10-30 14:39 | 只看该作者
4、MM32F0010UART中断接收的初始化配置:
(1)在MDK Keil工程中新建bsp_uartx.c和bsp_uartx.h文件,在bsp_uartx.c中包含bsp_uartx.h头文件
(2)在bsp_uartx.c文件中编写UART1中断接收的初始化函数,并定义UART1和UART2的接收缓存等参数
#include "bsp_uartx.h"

//UART1接收缓存,最大UART1_REC_LEN个字节
u8 UART1_Rx_Buf[UART1_REC_LEN];
//UART1接收计数
u16 UART1_Rx_Cnt;
//UART1多少ms允许判断接收完数据
u8 UART1_Rx_TimeCnt = 0;

//UART2接收缓存,最大UART1_REC_LEN个字节
u8 UART2_Rx_Buf[UART2_REC_LEN];
//UART2接收计数
u16 UART2_Rx_Cnt;
//UART2多少ms允许判断接收完数据
u8 UART2_Rx_TimeCnt = 0;
//UART1 接收标志
bool UART1_Rx_Flag = false;
//UART2 接收标志
bool UART2_Rx_Flag = false;

/**
***********************************************************************************************************************
*@函数名称:void Bsp_UART1_Init_Config(u32 bound)
*@功能描述:UART2 Init
*@输入参数:bound:通信波特率
*@返回参数:None
***********************************************************************************************************************
*/
void Bsp_UART1_Init_Config(u32 bound)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    UART_InitTypeDef UART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStruct;

    //使能UART1 时钟
    RCC_APB1PeriphClockCmd(RCC_APB1ENR_UART1, ENABLE);
    //使能GPIOA时钟
    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);

    //PA3 复用功能为UART1_RX
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_1);
    //PA12 复用功能为UART1_TX
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_1);

    GPIO_StructInit(&GPIO_InitStructure);
    //PA12 UART1_TX
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    //PA12 UART1_TX 推挽输出
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //GPIOA.3 UART1_RX
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    //PA3 UART1_RX上拉输入
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //自定义值初始化UART1结构体成员
    UART_StructInit(&UART_InitStructure);
    //配置串口波特率
    UART_InitStructure.UART_BaudRate = bound;
    //8位数据位长度
    UART_InitStructure.UART_WordLength = UART_WordLength_8b;
    //1位停止位
    UART_InitStructure.UART_StopBits = UART_StopBits_1;
    //配置为不带奇偶校验位
    UART_InitStructure.UART_Parity = UART_Parity_No;
    //配置为不带硬件流控
    UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;
    //允许UART接收和发送数据
    UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx;
    //使能UART1接收中断
    UART_ITConfig( UART1,  UART_IT_RXIEN, ENABLE);
    //根据配置的UART1结构体成员初始化UART1
    UART_Init(UART1, &UART_InitStructure);

    //使能UART1 NVIC中断通道
    NVIC_InitStruct.NVIC_IRQChannel = UART1_IRQn;
    //使能UART1 NVIC中断
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

    //设置UART1中断优先级
    NVIC_InitStruct.NVIC_IRQChannelPriority = 0;
    //根据配置的中断优先级参数初始化NVIC中断优先级
    NVIC_Init(& NVIC_InitStruct);
    //使能UART1工作
    UART_Cmd(UART1, ENABLE);
}


使用特权

评论回复
地板
LEDyyds|  楼主 | 2024-10-30 14:39 | 只看该作者
(3)在bsp_uartx.c文件中编写UART2中断接收的初始化函数
/**
***********************************************************************************************************************
*@函数名称:void Bsp_UART2_Init_Config(u32 bound)
*@功能描述:UART2 Init
*@输入参数:bound:通信波特率
*@返回参数:None
***********************************************************************************************************************
*/
void Bsp_UART2_Init_Config(u32 bound)
{
    //GPIO GPIO set
    GPIO_InitTypeDef GPIO_InitStructure;
    UART_InitTypeDef UART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStruct;

    //使能GPIOA时钟
    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);
    //使能UART2时钟
    RCC_APB1PeriphClockCmd(RCC_APB1ENR_UART2, ENABLE);

    //PA1 复用功能为UART2_TX
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_2);
    //PA13 复用功能为UART2_RX
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource13, GPIO_AF_2);

    GPIO_StructInit(&GPIO_InitStructure);
    //PA1 UART2_TX
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    //PA1 UART2_TX 推挽输出
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //GPIOA.13 UART2_RX
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    //PA13 UART2_RX上拉输入
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //自定义值初始化UART2结构体成员
    UART_StructInit(&UART_InitStructure);
    //配置串口波特率
    UART_InitStructure.UART_BaudRate = bound;
    //8位数据位长度
    UART_InitStructure.UART_WordLength = UART_WordLength_8b;
    //1位停止位
    UART_InitStructure.UART_StopBits = UART_StopBits_1;
    //配置为不带奇偶校验位
    UART_InitStructure.UART_Parity = UART_Parity_No;
    //配置为不带硬件流控
    UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;
    //允许UART接收和发送数据
    UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx;
    //使能UART2接收中断
    UART_ITConfig(UART2,  UART_IT_RXIEN, ENABLE);
    //根据配置的UART2结构体成员初始化UART2
    UART_Init(UART2, &UART_InitStructure);

    //使能UART2 NVIC中断通道
    NVIC_InitStruct.NVIC_IRQChannel = UART2_IRQn;
    //使能UART2 NVIC中断
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    //设置UART2中断优先级
    NVIC_InitStruct.NVIC_IRQChannelPriority = 1;
    //根据配置的中断优先级参数初始化NVIC中断优先级
    NVIC_Init(& NVIC_InitStruct);
    //使能UART2工作
    UART_Cmd(UART2, ENABLE);
}


使用特权

评论回复
5
LEDyyds|  楼主 | 2024-10-30 14:40 | 只看该作者
(4)在bsp_uartx.h文件中编写头文件,包括UART1和UART2中断接收初始化函数以及变量的外部声明,代码如下所示:
#ifndef __BSP_UARTX__H__
#define __BSP_UARTX__H__

#include "mm32_device.h"
#include "hal_conf.h"
#include "string.h"

//UART1 Baudrate
#define UART1_BAUD_RATE    (115200)
//UART2 Baudrate
#define UART2_BAUD_RATE    (115200)

//UART1最大接收字节数200
#define UART1_REC_LEN   (200)
//UART2最大接收字节数200
#define UART2_REC_LEN   (200)

//UART1接收缓存,最大UART1_REC_LEN个字节
extern u8  UART1_Rx_Buf[UART1_REC_LEN];
//UART2接收缓存,最大UART2_REC_LEN个字节
extern u8  UART2_Rx_Buf[UART2_REC_LEN];

//UART1接收计数
extern u16 UART1_Rx_Cnt;
//UART2接收计数
extern u16 UART2_Rx_Cnt;

//UART1多少ms允许判断接收完数据
extern u8 UART1_Rx_TimeCnt;
extern u8 UART2_Rx_TimeCnt;
//UART1 接收标志
extern bool UART1_Rx_Flag;
//UART2 接收标志
extern bool UART2_Rx_Flag;
//UART1 Init
void Bsp_UART1_Init_Config(u32 bound);
//UART2 Init
void Bsp_UART2_Init_Config(u32 bound);
//处理UART1接收任务
void Bsp_UART1_Recv_Task(void);
//处理UART2接收任务
void Bsp_UART2_Recv_Task(void);
//发送单字节数据
void Bsp_UART_SendByte(u8 dat);
//发送多字节数据
void Bsp_UART_SendBytes(u8 *buf, u16 len);
//发送ASCII字符
void Bsp_UART_SendASCII(char *str);

#endif


使用特权

评论回复
6
LEDyyds|  楼主 | 2024-10-30 14:41 | 只看该作者
5、MM32F0010UART中断接收函数的编写:
(1)在bsp_uartx.c文件中编写UART1中断接收数据函数,代码如下所示:
/**
***********************************************************************************************************************
*@函数名称:void UART1_IRQHandler(void)
*@功能描述:UART1 中断服务函数
*@输入参数:None
*@返回参数:None
***********************************************************************************************************************
*/
void UART1_IRQHandler(void)
{
    u8 Recbyte;

    if(UART_GetITStatus(UART1, UART_IT_RXIEN) == SET)
    {
        UART_ClearITPendingBit(UART1, UART_IT_RXIEN);
        //在TIM3里面对接收做超时处理,为后续处理接收数据做准备
        UART1_Rx_TimeCnt = 2;
        //读出UART1接收到的数据到Recbyte
        Recbyte = UART_ReceiveData(UART1);
        //把UART1接收到的数据缓存到UART1接收缓存数组中
        UART1_Rx_Buf[UART1_Rx_Cnt] = Recbyte;

        if(UART1_Rx_Cnt < UART1_REC_LEN-1)
        {
            //UART1接收计数
            UART1_Rx_Cnt++;
        }
        else
        {
            //接收缓存满清接收计数
            UART1_Rx_Cnt = 0;
        }
    }
}
(2)在bsp_uartx.c文件中编写UART2中断接收数据函数,代码如下所示:
/**
***********************************************************************************************************************
*@函数名称:void UART2_IRQHandler(void)
*@功能描述:UART2 中断服务函数
*@输入参数:None
*@返回参数:None
***********************************************************************************************************************
*/
void UART2_IRQHandler(void)
{
    u8 Recbyte;

    if(UART_GetITStatus(UART2, UART_IT_RXIEN) == SET)
    {
        UART_ClearITPendingBit(UART2, UART_IT_RXIEN);
        //在TIM3里面对接收做超时处理,为后续处理接收数据做准备
        UART2_Rx_TimeCnt = 3;
        //读出UART2接收到的数据到Recbyte
        Recbyte = UART_ReceiveData(UART2);
        //把UART2接收到的数据缓存到UART2接收缓存数组中
        UART2_Rx_Buf[UART2_Rx_Cnt] = Recbyte;

        if(UART2_Rx_Cnt < UART2_REC_LEN-1)
        {
            //UART2接收计数
            UART2_Rx_Cnt++;
        }
        else
        {
            //接收缓存满清接收计数
            UART2_Rx_Cnt = 0;
        }
    }
}


使用特权

评论回复
7
LEDyyds|  楼主 | 2024-10-30 14:42 | 只看该作者
6、MM32F0010UART查询方式发送数据函数的编写
(1)在bsp_uartx.c文件中编写UART查询方式发送单字节数据函数,代码如下所示:
/**
***********************************************************************************************************************
*@函数名称:void Bsp_UART_SendByte(UART_TypeDef* uart,u8 data)
*@功能描述:UART发送单字节数据
*@输入参数:uart:串口号,data:待发送的数据
*@返回参数:None
***********************************************************************************************************************
*/
void Bsp_UART_SendByte(UART_TypeDef* uart,u8 data)
{
    UART_SendData(uart, data);
    while(!UART_GetFlagStatus(uart, UART_FLAG_TXEPT));
}
2)在bsp_uartx.c文件中编写UART查询方式发送多字节数据函数,代码如下所示:
/**
***********************************************************************************************************************
*@函数名称:void Bsp_UART_SendBytes(UART_TypeDef* uart,u8 *buf, u16 len)
*@功能描述:UART发送多字节数据
*@输入参数:uart:串口号,buf:数据指针指向待发送的数据;len:数据长度
*@返回参数:None
***********************************************************************************************************************
*/
void Bsp_UART_SendBytes(UART_TypeDef* uart,u8 *buf, u16 len)
{
    while(len--)
    {
        Bsp_UART_SendByte(uart,*buf++);
    }
}
(3)在bsp_uartx.c文件中编写UART查询方式发送ASII字符函数,代码如下所示:
/**
***********************************************************************************************************************
*@函数名称:void Bsp_UART_SendASCII(UART_TypeDef* uart,char *str)
*@功能描述:发送ASII字符
*@输入参数:str:指向字符串的字符指针
*@返回参数:None
***********************************************************************************************************************
*/
void Bsp_UART_SendASCII(UART_TypeDef* uart,char *str)
{
    while(*str)
    {
        Bsp_UART_SendByte(uart,*str++);
    }
}



使用特权

评论回复
8
LEDyyds|  楼主 | 2024-10-30 14:44 | 只看该作者
7、MM32F0010UART处理接收数据函数的编写:
(1)在MDK Keil中新建bsp_timerx.c和bsp_timerx.h文件开一个TIM3定时器定时中断5ms为例,用作UART1和UART2接收数据超时标志,方便处理接收数据,bsp_timerx.c文件中包含bsp_timerx.h文件,在bsp_timerx.c中编写TIM3定时中断5ms初始化函数,代码如下所示:
/**
***********************************************************************************************************************
*@函数名称:void Bsp_TIM3_Init(u16 Prescaler,u16 Period)
*@功能描述:TIM3 Init
*@输入参数:Prescaler:预分频系数1-65536、Period:周期值
*@返回参数:None
***********************************************************************************************************************
*/
void Bsp_TIM3_Init(u16 Prescaler,u16 Period)
{
    TIM_TimeBaseInitTypeDef TIM_StructInit;
    NVIC_InitTypeDef NVIC_StructInit;

    //使能TIM3外设时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    //配置TIM3重载计数周期值
    TIM_StructInit.TIM_Period = Period;
    //配置TIM3 预分频系数
    TIM_StructInit.TIM_Prescaler = Prescaler;
    //配置TIM3时钟分割
    TIM_StructInit.TIM_ClockDivision = TIM_CKD_DIV1;
    //向上计数模式
    TIM_StructInit.TIM_CounterMode = TIM_CounterMode_Up;
    //配置脉冲周期计数
    TIM_StructInit.TIM_RepetitionCounter = 0;
    //根据以上配置参数初始化 TIM3结构体成员参数
    TIM_TimeBaseInit(TIM3, &TIM_StructInit);

    //使能TIM3 NVIC中断优先级通道
    NVIC_StructInit.NVIC_IRQChannel = TIM3_IRQn;
    //配置TIM3 NVIC中断优先级
    NVIC_StructInit.NVIC_IRQChannelPriority = 1;
    //使能NVIC中断优先级
    NVIC_StructInit.NVIC_IRQChannelCmd = ENABLE;
    //根据配置的中断优先级参数初始化TIM3中断优先级
    NVIC_Init(&NVIC_StructInit);

    //TIM3计时之前清向上计数标志
    TIM_ClearFlag(TIM3, TIM_FLAG_Update);
    //使能TIM3向上计时中断
    TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
    //使能TIM3 工作
    TIM_Cmd(TIM3, ENABLE);
}
(2)在bsp_timerx.c中编写TIM3定时中断5ms中断服务函数,代码如下所示:
/**
**************************************************************************************************************************
* 函数名称:void TIM3_IRQHandler(void)
* 函数功能:TIM3中断服务函数
* 输入参数:无
* 输出参数:无
* 返回数值:无
**************************************************************************************************************************
*/
void TIM3_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
    {
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);

        //UART1多少ms允许判断接收完数据,10ms可根据具体情况更改超时时间
        if(UART1_Rx_TimeCnt > 0)
        {
            UART1_Rx_TimeCnt--;

            if(UART1_Rx_TimeCnt == 0)
            {
                UART1_Rx_Flag = true;
            }
        }
        //UART2多少ms允许判断接收完数据,15ms可根据具体情况更改超时时间
        if(UART2_Rx_TimeCnt > 0)
        {
            UART2_Rx_TimeCnt--;

            if(UART2_Rx_TimeCnt == 0)
            {
                UART2_Rx_Flag = true;
            }
        }
    }
}
(3)在bsp_timerx.h中编写头文件,包含TIM3定时中断5ms初始化函数声明,UART头文件包含,代码如下所示:
#ifndef __BSP_TIMX__H__
#define __BSP_TIMX__H__

#include "mm32_device.h"
#include "hal_conf.h"
#include "bsp_uartx.h"


//初始化TIM3
void Bsp_TIM3_Init(u16 Prescaler,u16 Period);




#endif
(4)在bsp_uartx.c中编写处理UART1接收数据函数
/**
***********************************************************************************************************************
*@函数名称:void Bsp_UART1_Recv_Task(void)
*@功能描述:处理UART1接收任务
*@输入参数:None
*@返回参数:None
***********************************************************************************************************************
*/
void Bsp_UART1_Recv_Task(void)
{
    //UART1接收标志
    if(UART1_Rx_Flag == true)
    {
        UART1_Rx_Flag = false;

        //UART1接收到0x55 0xAA 0xEE
        if((UART1_Rx_Buf[0] == 0x55) && (UART1_Rx_Buf[1] == 0xAA) && (UART1_Rx_Buf[2] == 0xEE))
        {
            //UART1原样返回接收到的数据
            Bsp_UART_SendBytes(UART1,UART1_Rx_Buf,UART1_Rx_Cnt);
        }
        //清UART1接收计数
        UART1_Rx_Cnt = 0;
        //清UART1接收缓存
        memset(UART1_Rx_Buf,0,sizeof(UART1_Rx_Buf));
    }
}
(5)在bsp_uartx.c中编写处理UART2接收数据函数
/**
***********************************************************************************************************************
*@函数名称:void Bsp_UART2_Recv_Task(void)
*@功能描述:处理UART2接收任务
*@输入参数:None
*@返回参数:None
***********************************************************************************************************************
*/
void Bsp_UART2_Recv_Task(void)
{
    //UART2接收标志
    if(UART2_Rx_Flag == true)
    {
        UART2_Rx_Flag = false;
        //UART2接收到0xAA 0xBB 0xCC
        if((UART2_Rx_Buf[0] == 0xAA) && (UART2_Rx_Buf[1] == 0xBB) && (UART2_Rx_Buf[2] == 0xCC))
        {
            //UART2原样返回接收到的数据
            Bsp_UART_SendBytes(UART2,UART2_Rx_Buf,UART2_Rx_Cnt);
        }
        //清UART2接收计数
        UART2_Rx_Cnt = 0;
        //清UART2接收缓存
        memset(UART2_Rx_Buf,0,sizeof(UART2_Rx_Buf));
    }
}
(6)在main.c中文件中包含"bsp_uartx.h"、"delay.h"(含SysTick 1ms初始化函数声明即DELAY_Init、DELAY_Ms(__IO u32 count))、"bsp_timerx.h"头文件,在main函数中分别调用SysTick初始化函数DELAY_Init、DELAY_Ms(1000);延时1s(注意:因PA13为SWD烧录口,MCU每次上电复位瞬间默认为SWD功能,如果用户把PA13复用成了UART2_RX功能在main函数中很快就被初始化成串口2的UART2_RX功能,导致来不及识别烧录时序,造成下次无法支持烧录代码,因此最好延时1s再复用为UART2_RX功能让烧录器每次烧录时有足够的时间识别MCU的烧录时序)Bsp_TIM3_Init、Bsp_UART1_Init_Config、Bsp_UART2_Init_Config初始化,波特率均设为115200,在while(1)大循环中分别调用Bsp_UART1_Recv_Task、Bsp_UART2_Recv_Task处理UART1和UART2接收任务函数,代码如下所示,编译代码并烧录到MM32F0010核心板或开发板中。
#include "delay.h"
#include "bsp_timerx.h"
#include "bsp_uartx.h"

/**
***********************************************************************************************************************
*@函数名称:int main(void)
*@功能描述:main函数,主函数入口代码在这里开始执行
*@输入参数:None
*@返回参数:int:0(和编译器有关)
***********************************************************************************************************************
*/
int main(void)
{
    //SysTick Init
    DELAY_Init();
    //Delay 1000ms
    DELAY_Ms(1000);
    //TIM3 Init Config 5ms
    Bsp_TIM3_Init(SystemCoreClock/100000-1,500-1);
    //UART1 Init Baudrate 115200
    Bsp_UART1_Init_Config(UART1_BAUD_RATE);
    //UART2 Init Baudrate 115200
    Bsp_UART2_Init_Config(UART2_BAUD_RATE);

    while(1)
    {
        //处理UART1接收任务
        Bsp_UART1_Recv_Task();
        //处理UART2接收任务
        Bsp_UART2_Recv_Task();

    }
}


使用特权

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

本版积分规则

122

主题

867

帖子

1

粉丝