打印
[其他]

灵动微MM32F013x芯片学习-UART1中断接收

[复制链接]
699|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
喂什么玩意|  楼主 | 2022-7-31 22:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//busclk unit is 1Khz
void uart_init (UART_TypeDef *UART,uint32 busclk,uint32 baud)
{  
    uint16 BRR=0;

    //enable clock   
    RCC->AHBENR |= RCC_AHBENR_GPIOB; //enablePORTB clock
    RCC->AHBENR |= RCC_AHBENR_GPIOC; //enablePORTC clock
   
    if(UART == UART1)
        RCC->APB2ENR |= RCC_APB2ENR_UART1;
    else
        RCC->APB1ENR |= RCC_APB1ENR_UART2;

    //pin mux
    if(UART == UART1)
    {
        //UART1_TX -> B6
        GPIOB->AFRL &= ~GPIO_AFRL_AFR6;
        GPIOB->AFRL |= (GPIO_AF_MODE0 << GPIO_AFRL_AFR6_Pos);
        
        GPIOB->CRL &= ~(GPIO_CNF_MODE_MASK << GPIO_CRL_CNF_MODE_6_Pos);
        GPIOB->CRL |= (GPIO_CNF_MODE_AF_PP << GPIO_CRL_CNF_MODE_6_Pos);
        
        //UART1_RX -> B7
        GPIOB->AFRL &= ~GPIO_AFRL_AFR7;
        GPIOB->AFRL |= (GPIO_AF_MODE0 << GPIO_AFRL_AFR7_Pos);

        GPIOB->CRL &= ~(GPIO_CNF_MODE_MASK << GPIO_CRL_CNF_MODE_7_Pos);
        GPIOB->CRL |= (GPIO_CNF_MODE_FLOATING << GPIO_CRL_CNF_MODE_7_Pos);
    }
    else
    {
        //UART2_TX -> C4
        GPIOC->AFRL &= ~GPIO_AFRL_AFR4;
        GPIOC->AFRL |= (GPIO_AF_MODE3 << GPIO_AFRL_AFR4_Pos);
        
        GPIOC->CRL &= ~(GPIO_CNF_MODE_MASK << GPIO_CRL_CNF_MODE_4_Pos);
        GPIOC->CRL |= (GPIO_CNF_MODE_AF_PP << GPIO_CRL_CNF_MODE_4_Pos);
        
        //UART2_RX -> C5
        GPIOC->AFRL &= ~GPIO_AFRL_AFR5;
        GPIOC->AFRL |= (GPIO_AF_MODE0 << GPIO_AFRL_AFR5_Pos);

        GPIOC->CRL &= ~(GPIO_CNF_MODE_MASK << GPIO_CRL_CNF_MODE_5_Pos);
        GPIOC->CRL |= (GPIO_CNF_MODE_FLOATING << GPIO_CRL_CNF_MODE_5_Pos);
    }
   
    //reset uart module
    if(UART == UART1)
    {
        RCC->APB2RSTR |= RCC_APB2RSTR_UART1;
        RCC->APB2RSTR &= ~(RCC_APB2RSTR_UART1);
    }
    else
    {
        RCC->APB1RSTR |= RCC_APB1RSTR_UART2;
        RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART2);
    }
   

    /* Configure the UART for 8-bit mode, no parity , 1 stop*/
    UART->CCR = UART_CCR_CHAR_8b;

    /* Calculate baud settings */
    BRR = busclk*1000/baud/16;
    UART->BRR = BRR;

    /* Enable receiver and transmitter */
    UART->GCR |= UART_GCR_RX;//Enable receiver
    UART->GCR |= UART_GCR_TX;//Enable transmitter

    //enable rx interrupt
    UART1->IER |= UART_IER_RX;

    //enable uart
    UART->GCR |= UART_GCR_UART;

    if(UART1 == UART)
    {
        NVIC_SetPriority(UART1_IRQn,3);
        NVIC_EnableIRQ(UART1_IRQn);
    }
    else
    {
        NVIC_SetPriority(UART2_IRQn,3);
        NVIC_EnableIRQ(UART2_IRQn);
    }
}

void UART1_IRQHandler(void)
{

    uint8 tmp=0;
    if(UART1->ISR & UART_ISR_RX)
    {
        UART1->ICR = UART_ICR_RX;//clear  receive interrupt
        tmp = base->RDR;
    }
}



使用特权

评论回复
沙发
七毛钱| | 2022-8-1 16:39 | 只看该作者
楼主这妥妥的是代码猿啊,全篇不见一个字

使用特权

评论回复
板凳
sparrow054| | 2022-8-1 20:18 | 只看该作者
是啊,也不知道啥意思,天天看代码,眼睛都花了

使用特权

评论回复
地板
caigang13| | 2022-8-2 07:36 | 只看该作者
这是不写代码规范的

使用特权

评论回复
5
duo点| | 2022-8-17 11:02 | 只看该作者
请规范写代码,哈哈

使用特权

评论回复
6
uiint| | 2022-8-20 14:42 | 只看该作者
支持几个串口?  

使用特权

评论回复
7
modesty3jonah| | 2022-8-20 16:40 | 只看该作者
MM32F013x替代哪个芯片

使用特权

评论回复
8
mikewalpole| | 2022-8-20 20:02 | 只看该作者
可以dma传输吗   

使用特权

评论回复
9
Bowclad| | 2022-9-16 20:52 | 只看该作者
这是不写代码规范的

使用特权

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

本版积分规则

39

主题

414

帖子

0

粉丝