CX32L003 UART1串口使用记录

使用CX32L003的串口必须给使用外部晶振,内部时钟精度太低,实验室玩玩可以用,做产品千万别给自己埋雷。

以下都是使用外挂24MHz晶振的,CX32L003的UART有点怪,厂家给的UART收发例程应该有点问题。


void UART1_IRQHandler(void)//USART1中断
{
 if((UART1->INTSR&UART_INTSR_RI)!=RESET) //接收完成中断有效
 {
  UART1->INTCLR|=UART_INTSR_RI;//清除接收完成中断标志位
  UART1_BUFFER[u16CNT_1]=(UART1->SBUF); //读取接收数据
  u16CNT_1=u16CNT_1+1;
 }
}

void UART1_Baud_Port_Cfg(unsigned long Baudrate)//USART1波特率设置,引脚配置
{
 GPIO_InitTypeDef GPIO_InitStruct = {0};

 __HAL_RCC_GPIOD_CLK_ENABLE();
    /**if UARTx is UART0
        GPIO Configuration:    
    PD6     ------> UART1_RXD
    PD5     ------> UART1_TXD
    */
    GPIO_InitStruct.Pin = GPIO_PIN_6;//PD6-RX
    GPIO_InitStruct.Mode = GPIO_MODE_AF;
        GPIO_InitStruct.OpenDrain = GPIO_PUSHPULL;    
        GPIO_InitStruct.Debounce.Enable = GPIO_DEBOUNCE_DISABLE;
        GPIO_InitStruct.SlewRate = GPIO_SLEW_RATE_HIGH;
        GPIO_InitStruct.DrvStrength = GPIO_DRV_STRENGTH_HIGH;
        GPIO_InitStruct.Pull = GPIO_PULLUP;
        GPIO_InitStruct.Alternate = GPIO_AF5_UART1_RXD;
    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
        
    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_AF;
        GPIO_InitStruct.Alternate = GPIO_AF5_UART1_TXD;
    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
    
   
 

 
 RCC->PCLKEN|=RCC_PCLKEN_UART1CKEN;//UART1时钟开启(UART1 PCLK 时钟使能)
 UART1->SCON|=UART_SCON_RIEN;//打开接收完成中断使能
 UART1->SCON&=~UART_SCON_TIEN;//关闭发送完成中断使能
 UART1->SCON&=~UART_SCON_SM2_Msk;//关闭多从机通讯以及地址自动匹配
 UART1->SCON|=UART_SCON_SM0_SM1_1;//8位数据格式
 UART1->SCON|=UART_SCON_DBAUD;//双波特率打开
 
 UART1->BAUDCR|=(2*(HAL_RCC_GetPCLKFreq())/(32*(Baudrate))+1);//双倍波特率
 //UART1->BAUDCR|=(1*(HAL_RCC_GetPCLKFreq())/(32*(Baudrate))+1);//单倍波特率
 UART1->BAUDCR|=UART_BAUDCR_SELF_BRG;
 NVIC_EnableIRQ(UART1_IRQn);
 UART1->SCON|=UART_SCON_REN;//接收和发送使能//只能定义在这,如果初始化的时候早于打开中断设置,就会中断开启后进入接收中断一次
 
 NVIC_SetPriority(UART1_IRQn,PRIORITY_LOW);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值