[其他] 灵动微MM32F013x芯片学习-UART1中断接收

[复制链接]
 楼主| 喂什么玩意 发表于 2022-7-31 22:14 | 显示全部楼层 |阅读模式
  1. //busclk unit is 1Khz
  2. void uart_init (UART_TypeDef *UART,uint32 busclk,uint32 baud)
  3. {  
  4.     uint16 BRR=0;

  5.     //enable clock   
  6.     RCC->AHBENR |= RCC_AHBENR_GPIOB; //enablePORTB clock
  7.     RCC->AHBENR |= RCC_AHBENR_GPIOC; //enablePORTC clock
  8.    
  9.     if(UART == UART1)
  10.         RCC->APB2ENR |= RCC_APB2ENR_UART1;
  11.     else
  12.         RCC->APB1ENR |= RCC_APB1ENR_UART2;

  13.     //pin mux
  14.     if(UART == UART1)
  15.     {
  16.         //UART1_TX -> B6
  17.         GPIOB->AFRL &= ~GPIO_AFRL_AFR6;
  18.         GPIOB->AFRL |= (GPIO_AF_MODE0 << GPIO_AFRL_AFR6_Pos);
  19.         
  20.         GPIOB->CRL &= ~(GPIO_CNF_MODE_MASK << GPIO_CRL_CNF_MODE_6_Pos);
  21.         GPIOB->CRL |= (GPIO_CNF_MODE_AF_PP << GPIO_CRL_CNF_MODE_6_Pos);
  22.         
  23.         //UART1_RX -> B7
  24.         GPIOB->AFRL &= ~GPIO_AFRL_AFR7;
  25.         GPIOB->AFRL |= (GPIO_AF_MODE0 << GPIO_AFRL_AFR7_Pos);

  26.         GPIOB->CRL &= ~(GPIO_CNF_MODE_MASK << GPIO_CRL_CNF_MODE_7_Pos);
  27.         GPIOB->CRL |= (GPIO_CNF_MODE_FLOATING << GPIO_CRL_CNF_MODE_7_Pos);
  28.     }
  29.     else
  30.     {
  31.         //UART2_TX -> C4
  32.         GPIOC->AFRL &= ~GPIO_AFRL_AFR4;
  33.         GPIOC->AFRL |= (GPIO_AF_MODE3 << GPIO_AFRL_AFR4_Pos);
  34.         
  35.         GPIOC->CRL &= ~(GPIO_CNF_MODE_MASK << GPIO_CRL_CNF_MODE_4_Pos);
  36.         GPIOC->CRL |= (GPIO_CNF_MODE_AF_PP << GPIO_CRL_CNF_MODE_4_Pos);
  37.         
  38.         //UART2_RX -> C5
  39.         GPIOC->AFRL &= ~GPIO_AFRL_AFR5;
  40.         GPIOC->AFRL |= (GPIO_AF_MODE0 << GPIO_AFRL_AFR5_Pos);

  41.         GPIOC->CRL &= ~(GPIO_CNF_MODE_MASK << GPIO_CRL_CNF_MODE_5_Pos);
  42.         GPIOC->CRL |= (GPIO_CNF_MODE_FLOATING << GPIO_CRL_CNF_MODE_5_Pos);
  43.     }
  44.    
  45.     //reset uart module
  46.     if(UART == UART1)
  47.     {
  48.         RCC->APB2RSTR |= RCC_APB2RSTR_UART1;
  49.         RCC->APB2RSTR &= ~(RCC_APB2RSTR_UART1);
  50.     }
  51.     else
  52.     {
  53.         RCC->APB1RSTR |= RCC_APB1RSTR_UART2;
  54.         RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART2);
  55.     }
  56.    

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

  59.     /* Calculate baud settings */
  60.     BRR = busclk*1000/baud/16;
  61.     UART->BRR = BRR;

  62.     /* Enable receiver and transmitter */
  63.     UART->GCR |= UART_GCR_RX;//Enable receiver
  64.     UART->GCR |= UART_GCR_TX;//Enable transmitter

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

  67.     //enable uart
  68.     UART->GCR |= UART_GCR_UART;

  69.     if(UART1 == UART)
  70.     {
  71.         NVIC_SetPriority(UART1_IRQn,3);
  72.         NVIC_EnableIRQ(UART1_IRQn);
  73.     }
  74.     else
  75.     {
  76.         NVIC_SetPriority(UART2_IRQn,3);
  77.         NVIC_EnableIRQ(UART2_IRQn);
  78.     }
  79. }

  80. void UART1_IRQHandler(void)
  81. {

  82.     uint8 tmp=0;
  83.     if(UART1->ISR & UART_ISR_RX)
  84.     {
  85.         UART1->ICR = UART_ICR_RX;//clear  receive interrupt
  86.         tmp = base->RDR;
  87.     }
  88. }



七毛钱 发表于 2022-8-1 16:39 来自手机 | 显示全部楼层
楼主这妥妥的是代码猿啊,全篇不见一个字
sparrow054 发表于 2022-8-1 20:18 | 显示全部楼层
是啊,也不知道啥意思,天天看代码,眼睛都花了
caigang13 发表于 2022-8-2 07:36 来自手机 | 显示全部楼层
这是不写代码规范的
duo点 发表于 2022-8-17 11:02 来自手机 | 显示全部楼层
请规范写代码,哈哈
uiint 发表于 2022-8-20 14:42 | 显示全部楼层
支持几个串口?  
modesty3jonah 发表于 2022-8-20 16:40 | 显示全部楼层
MM32F013x替代哪个芯片
mikewalpole 发表于 2022-8-20 20:02 | 显示全部楼层
可以dma传输吗   
Bowclad 发表于 2022-9-16 20:52 | 显示全部楼层
这是不写代码规范的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

648

帖子

0

粉丝
快速回复 返回顶部 返回列表