打印
[MM32软件]

【MM32 eMiniBoard测评报告】+ 串口2库函数的问题

[复制链接]
658|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Cjy_JDxy|  楼主 | 2020-4-23 21:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
串口1库函数程序,可以发送。我改成串口2则不成功,发不出来。
代码如下:
void UartInit_Loop(void)
{

    //GPIO¶Ë¿ÚÉèÖÃ
    GPIO_InitTypeDef GPIO_InitStructure;
    UART_InitTypeDef UART_InitStructure;

    RCC_APB2PeriphClockCmd(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");
}
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;
        }
    }
}


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++);
    }
}

请高手看看,谢谢!

使用特权

评论回复
沙发
fwloveu| | 2020-4-24 15:32 | 只看该作者
我记得arm的串口好像有个子选择功能,就是你不需要在外设的物理上面区分那个串口,就类似于这样的语句:GPIO_InitStruct.Alternate = GPIO_AF7_USART1;,如果使用串口2的话,就改成GPIO_AF7_USART2,不知道是不是

使用特权

评论回复
板凳
Cjy_JDxy|  楼主 | 2020-4-24 17:18 | 只看该作者
GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1);
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);
这个功能我只改了管脚。寄存器是可以发出数据的。

使用特权

评论回复
地板
WoodData| | 2020-4-25 14:26 | 只看该作者
RCC_APB2PeriphClockCmd(RCC_APB1Periph_UART2, ENABLE);        //ʹÄÜUART2
这里错了应该是APB1.
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART2, ENABLE);        //ʹÄÜUART2

使用特权

评论回复
5
Cjy_JDxy|  楼主 | 2020-4-25 15:39 | 只看该作者
WoodData 发表于 2020-4-25 14:26
RCC_APB2PeriphClockCmd(RCC_APB1Periph_UART2, ENABLE);        //ʹÄÜUART2
这里错了应该是APB1.
RCC ...

多谢提醒,我晚上再试试

使用特权

评论回复
6
Cjy_JDxy|  楼主 | 2020-4-25 18:44 | 只看该作者
WoodData 发表于 2020-4-25 14:26
RCC_APB2PeriphClockCmd(RCC_APB1Periph_UART2, ENABLE);        //ʹÄÜUART2
这里错了应该是APB1.
RCC ...

好了,多谢

使用特权

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

本版积分规则

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

553

主题

3530

帖子

19

粉丝