打印
[MM32软件]

【MM32 eMiniBoard测评报告】+ 串口2寄存器的问题

[复制链接]
705|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我用库的方式搞串口2,数据发不出来。
改用寄存器方式,代码如下:
void UartInit_Loop(void)
{

    //GPIO¶Ë¿ÚÉèÖà        
    RCC->AHBENR|=1<<17;   //ʹÄÜGPIOA¿ÚʱÖÓ  
    RCC->APB1ENR|=1<<17;  //ʹÄÜ´®¿ÚʱÖÓ


    GPIOA->AFRL&=0x00ff;
    GPIOA->AFRL|=0x1100;                //


    //UART ³õʼ»¯ÉèÖÃ
    UART2->BRR = (SystemCoreClock / 16) /(115200);
    UART2->FRA=(SystemCoreClock / 16) %(115200);
    UART2->CCR|=0x30; //110000
    UART2->GCR|=0x19;  //11001;
    UART2->GCR |= 0x0001;                    //ʹÄÜ´®¿Ú2

    GPIOA->CRL&=0XFFFF00FF;//IO״̬ÉèÖÃ
    GPIOA->CRL|=0X00008B00;//IO״̬ÉèÖÃ

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

void uart_send(char c)
{
    UART2->TDR = c;
    while(1)
    {
        if(UART2->ISR&0x1)
        {
            UART2->ICR = 0x1;
            break;
        }
    }
}

long int i;
       
    UartInit_Loop();  //UART1µÄ·¢ËÍ£¬¿ÉÒÔͨ¹ý´®¿ÚÈí¼þ´òÓ¡UART OK
    while(1)              //ÎÞÏÞÑ­»·
    {
        //Uart1RxTest(UART1);//UART1µÄ½ÓÊÕ£¬ÔÚ´®¿ÚÈí¼þÖÐÊäÈë×Ö·û£¬¿ÉÒÔͨ¹ý´òÓ¡ÑéÖ¤½ÓÊÕµÄÊý¾ÝÊÇ·ñÕýÈ·
                        uart_send(0x55);
                        for(i=2000000;i>0;i--);
    }

用串口1是波特率115200,可是改成串口2,波特率变成57600了。

高手看看,怎么回事?谢谢!

使用特权

评论回复
沙发
fwloveu| | 2020-4-24 15:56 | 只看该作者
你的systemcoreclock是多少?

使用特权

评论回复
板凳
Cjy_JDxy|  楼主 | 2020-4-24 17:16 | 只看该作者
fwloveu 发表于 2020-4-24 15:56
你的systemcoreclock是多少?

没设置系统时钟频率,和串口1一样

使用特权

评论回复
地板
gaoyang9992006| | 2020-4-25 08:48 | 只看该作者
这个串口很奇葩,目前不知道是库函数问题,还是硬件本身问题,一串字符串,发送出来中间间隔都不同,也就是串口的时钟节拍有问题,不知是因为波特率匹配不对有差错,还是咋回事,降低到9600还会出现。
如果我每次接收一组数据后插入一个换行,就会发现本来一行字符串应该一起连续发出来的,而这个板子却随机的断开成了两段,随机的。。

使用特权

评论回复
5
Cjy_JDxy|  楼主 | 2020-4-25 09:04 | 只看该作者
gaoyang9992006 发表于 2020-4-25 08:48
这个串口很奇葩,目前不知道是库函数问题,还是硬件本身问题,一串字符串,发送出来中间间隔都不同,也就是 ...

是啊。他们版主也不出来说句话

使用特权

评论回复
6
一路向北lm| | 2020-4-25 09:45 | 只看该作者
Cjy_JDxy 发表于 2020-4-25 09:04
是啊。他们版主也不出来说句话

串口1正常

使用特权

评论回复
7
Cjy_JDxy|  楼主 | 2020-4-25 09:50 | 只看该作者

串口1也不正常,接收不正常

使用特权

评论回复
8
WoodData| | 2020-4-25 13:55 | 只看该作者
串口2波特率减半了是因为串口2的时钟是系统2分频的,在SystemInit初始化的APB1=DIV2;APB2=DIV1;AHB=DIV1。

使用特权

评论回复
9
Cjy_JDxy|  楼主 | 2020-4-25 15:40 | 只看该作者
WoodData 发表于 2020-4-25 13:55
串口2波特率减半了是因为串口2的时钟是系统2分频的,在SystemInit初始化的APB1=DIV2;APB2=DIV1;AHB=DIV1。 ...

谢谢!你是个大神

使用特权

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

本版积分规则

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

553

主题

3530

帖子

19

粉丝