打印
[MM32软件]

【MM32 eMiniBoard测评报告】+ 6、串口2

[复制链接]
529|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天大神
WoodData
检查出一个错误,下了班搞了一下。
串口2好啦。
原理图:

程序:
void UartInit_Loop(void)
{

    //GPIO端口设置
    GPIO_InitTypeDef GPIO_InitStructure;
    UART_InitTypeDef UART_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART2, ENABLE);        //使能UART2
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);  //开启GPIOA时钟

    //UART2 NVIC 配置

    //UART 初始化设置
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1);
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);


    UART_InitStructure.UART_BaudRate = 115200;//串口波特率
    UART_InitStructure.UART_WordLength = UART_WordLength_8b;//字长为8位数据格式
    UART_InitStructure.UART_StopBits = UART_StopBits_1;//一个停止位
    UART_InitStructure.UART_Parity = UART_Parity_No;//无奇偶校验位
    UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;//无硬件数据流控制
    UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx;        //收发模式

    UART_Init(UART2, &UART_InitStructure); //初始化串口2
    UART_Cmd(UART2, ENABLE);                    //使能串口2

    //UART2_TX   GPIOA.2
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.2

    //UART2_RX          GPIOA.3初始化
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.3  

    //printf("UART OK!\r\n");
}




/********************************************************************************************************
**函数信息 :uart_send(UART_TypeDef* UARTx,char c)                    
**功能描述 :串口发送字节
**输入参数 :UART_TypeDef* UARTx ,选择UART1、UART2、UART3
**输入参数 :char c ,串口发送的字节
**输出参数 :无
********************************************************************************************************/
void uart_send(UART_TypeDef* UARTx,char c)
{
    UART_SendData(UARTx,(uint16_t)c);  
    while(1)
    {
        if(UART_GetITStatus(UARTx, UART_IT_TXIEN))
        {
            UART_ClearITPendingBit(UARTx, UART_IT_TXIEN);
            break;
        }
    }
}

/********************************************************************************************************
**函数信息 :unsigned char inbyte(UART_TypeDef* UARTx)               
**功能描述 :串口接收函数
**输入参数 :UART_TypeDef* UARTx ,选择UART1、UART2、UART3
**输出参数 :unsigned char 串口接收返回的字节
********************************************************************************************************/
unsigned char inbyte(UART_TypeDef* UARTx)
{
    unsigned char temp;

    while(1)
    {
        if(UART_GetITStatus(UARTx, UART_IT_RXIEN))
        {
            UART_ClearITPendingBit(UARTx, UART_IT_RXIEN);  //清除接受中断位
            break;
        }
    }
    temp = (uint8_t)UART_ReceiveData(UARTx);
    if(temp==0xd)//清除错误接收的数据
    {
        return 0;               
    }
    return temp;
}


/********************************************************************************************************
**函数信息 :void Uart1RxTest(UART_TypeDef* UARTx)               
**功能描述 :串口接收函数测试
**输入参数 :UART_TypeDef* UARTx ,选择UART1、UART2、UART3
**输出参数 :无
********************************************************************************************************/

void Uart2RxTest(UART_TypeDef* UARTx)
{
    unsigned char temp;
    temp = inbyte(UARTx);
    if(temp!=0)
    {
                        UART_SendData(UARTx,(uint16_t)temp);  
        //printf("您输入的数据为:%c\r\n",temp);       
    }                       
}

#include "delay.h"
#include "sys.h"
#include "led.h"
#include "uart_loop.h"
/********************************************************************************************************
**函数信息 :int main (void)                          
**功能描述 :开机后,ARMLED闪动
**输入参数 :
**输出参数 :
********************************************************************************************************/

int main(void)
{
    long int i;
       
    //LED_Init();                                   //初始化与LED连接的硬件接口
    UartInit_Loop();  //UART2的发送,可以通过串口软件打印UART OK
    while(1)              //无限循环
    {
        Uart2RxTest(UART2);//UART1的接收,在串口软件中输入字符,可以通过打印验证接收的数据是否正确
//                        uart_send(UART2,0x55);
//                        for(i=0;i<1300000;i++);
    }
}

效果图



工程:

UART2.rar (326.82 KB)

使用特权

评论回复
沙发
caizhiwei| | 2020-4-27 22:27 | 只看该作者
是啥原因?小辣椒哥哥?

使用特权

评论回复
板凳
Cjy_JDxy|  楼主 | 2020-4-28 07:54 | 只看该作者
caizhiwei 发表于 2020-4-27 22:27
是啥原因?小辣椒哥哥?

RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART2, ENABLE);        //使能UART2
这一句我原来写错了
写成
RCC_APB2PeriphClockCmd(RCC_APB1Periph_UART2, ENABLE);        //使能UART2

使用特权

评论回复
地板
caizhiwei| | 2020-4-28 09:17 | 只看该作者
感谢小辣椒,你可是论坛的红人哦,哈哈

使用特权

评论回复
5
Cjy_JDxy|  楼主 | 2020-4-28 09:22 | 只看该作者
caizhiwei 发表于 2020-4-28 09:17
感谢小辣椒,你可是论坛的红人哦,哈哈

你给我起外号,小辣椒

使用特权

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

本版积分规则

个人签名:绿水本无忧因风皱面,青山原不老为雪白头。

553

主题

3530

帖子

19

粉丝