芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

飞芯科技-芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

GD32F103RCT6单片机串口初始化单片机解密

单片机解密//USART0
void Usart0Init(uint32_t baud)                  //PA10 RX  PA9 TX     //
单片机解密{
        uint32_t Udiv = 0;
  RCU_APB2EN |= 0x00000001<<2;                //使能GPIOA时钟
        RCU_APB2EN |= 0x00000001<<14;               //使能USART0时钟
  GPIO_CTL1(GPIOA) &= 0xfffff0ff;            //设置RX引脚浮空输入  PA10
        GPIO_CTL1(GPIOA) |= (0x00000004<<(4*2));
  GPIO_CTL1(GPIOA) &= 0xffffff0f;            //设置TX引脚复用推完输出  50M     PA9
  GPIO_CTL1(GPIOA) |= (0x0000000B<<(4*1));   

        RCU_APB2RST  |=  (0x00000001 <<14);        //复位USART0
        RCU_APB2RST  &= ~(0x00000001 <<14);        //停止复位
        
        //单片机解密计算波特率分频比   udiv = UART0_CLK/(16*baud)  但寄存器中中小数点后面有四位,则需要扩大16倍  则 =  UART0_CLK/baud
        //单片机解密时钟频率为APB2(系统初始化时已设定APB2等于APB等于系统时钟108M)
  Udiv = (APB2_CLK+baud/2)/baud;                  //参考库函数比用户手册上大一些,是不是因为经验不稳定而加大一点
        USART_BAUD(USART0) = (Udiv) & 0x0000ffff;       //分频比 共16位  12位整数  4位小数

        USART_CTL0(USART0) &= ~(0x00000001 <<12);       //12位设置为0  表示8位数据位

        
        USART_CTL1(USART0) &= ~(0x00000003 <<12);        //12-13位设置为0   表示1位停止位
        USART_CTL0(USART0) &= ~(0x00000003 <<9);         //9-10位设置为0    表示无效验位
        
        USART_CTL2(USART0) &= ~(0x00000003 <<8);         //8-9位设置为0     表示禁用RTS CTS
        
        USART_CTL0(USART0) &= ~(0x00000003 <<2);       //第2位 设置为1  使能接收  3位设置为1  使能发送
        USART_CTL0(USART0) |=  (0x00000003 <<2);
        
        USART_CTL0(USART0) |=  (0x00000003 <<5);      //5位置1  接收缓冲器清空中断   6位置1  发送完成中断
        
        nvic_irq_enable(USART0_IRQn, 0, 0);           //设置中断优先级
        USART_CTL0(USART0) |=  (0x00000001 <<13);      //使能USART0
}

void USART0_IRQHandler(void)
{
        uint32_t tmp = 0;
        if(USART_STAT(USART0) &(0x00000001 <<6))          //发送完成
  {
                USART_STAT(USART0) &= ~(0x00000001 <<6);
                if(mUsart0.TX.OntPtr != mUsart0.TX.InPtr)
                {
                 USART_DATA(USART0) =  mUsart0.TX.Buffer[mUsart0.TX.OntPtr];
                        mUsart0.TX.OntPtr++;
                        if(mUsart0.TX.OntPtr >=USART0_TX_BUFFER_SIZE)
                        {
                          mUsart0.TX.OntPtr = 0;
                        }
                }
                else
                {
                        mUsart0.IsSending = 0;
                }
               
        }
        



联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.feixindz.com
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信