查看: 5958|回复: 15

GD32F190寄存器方式

[复制链接]
  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2016-5-22 14:36:24 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 糖悦之果飞 于 2016-5-23 17:28 编辑

    几天的GD32学习,都是用库函数写程序,虽然编写很便利,但是整个代码变得臃肿.这里我准备编写寄存器方式的代码.
    先给个IO的初始代码:


    RCC->AHBCCR |= RCC_AHBCCR_PBEN;//时钟初始

    GPIOB->OSPD |= 0xffffffff;//上拉­

    GPIOB->PUPD |= 0x00555500;//IO速度
    GPIOB->OMODE |= 0x0700;   //输出类型
    GPIOB->CTLR |= 0x00555500;//输出模式
            
    GPIOB->DOR |= 0x00000000; //输出内容

    GPIOB->BOR |= 0x0400;//IO输出1
    GPIOB->BCR |= 0x0400;//IO输出0
    回复

    使用道具 举报

  • TA的每日心情

    2021-12-7 12:35
  • 签到天数: 1354 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2016-5-22 22:31:19 | 显示全部楼层
    下载下来,参考和学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-5-29 23:09:09 | 显示全部楼层
    串口寄存器方式初始化:
    void UsartInit(void)
    {
              RCC->AHBCCR |= RCC_AHBCCR_PAEN;//IO
        RCC->APB1CCR |= RCC_APB1PERIPH_USART2;//USARTCLK
                    GPIOA->AFS[0] = 0x1100;//IO AFS 2,3
           
              GPIOA->OSPD |= 0xffffffff;//speed
              GPIOA->PUPD |= 0x00555000;//up
              GPIOA->OMODE |= 0x0700;   //输出类型
              GPIOA->CTLR |= 0x005500a0;//输出模式
              GPIOA->DOR |= 0x00000000; //输出内容
              
              USART2->BRR = 0x000016c0;//9600@28MHZ
              USART2->CTLR1 |= 0x00001000;
              USART2->CTLR2 &= ~0x00003000;
              USART2->CTLR3 &= ~0x00002000;
              USART2->CTLR1 |= 0x00000400;//PCEN
              USART2->CTLR1 |= 0x000000a0;
              USART2->CTLR1 |= USART_CTLR1_UEN;
    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-5-29 23:10:46 | 显示全部楼层
              RCC->APB1CCR |= RCC_APB1PERIPH_TIMER6;
           
               //RCC->APB1RCR |= RCC_APB1PERIPH_TIMER6RST;
               //RCC->APB1RCR &= ~RCC_APB1PERIPH_TIMER6RST;
              TIMER6->STR = (uint16_t)~TIMER_INT_UPDATE;
              TIMER6->DIE |= TIMER_INT_UPDATE;
            TIMER6->CTLR1 |= TIMER_CTLR1_CNTE;
               TIMER6->CTLR1 = 0x0000;//控制方式
               //TIMER6->CTLR2 = 0x0020;//控制输出
               TIMER6->EVG = 0x0000;  //事件触发
               TIMER6->PSC = 0x0000;   //预分频数
               TIMER6->CARL = 0x007f; //重载
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-5-29 23:11:16 | 显示全部楼层
    定时器初始化寄存器
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-5-29 23:12:41 | 显示全部楼层
    void EXTI4_15_IRQHandler(void)
    {
        if(((EXTI->PD & EXTI_LINE6) != (uint32_t)RESET) && ((EXTI->IER & EXTI_LINE6) != (uint32_t)RESET)){
                                   
                               //GPIOB->BOR |= 0x0100;                          
        }
                    EXTI->PD = EXTI_LINE6;
                    if(((EXTI->PD & EXTI_LINE7) != (uint32_t)RESET) && ((EXTI->IER & EXTI_LINE7) != (uint32_t)RESET)){
                                                 
                              //GPIOB->BOR |= 0x0200;
        }
                    EXTI->PD = EXTI_LINE7;
    }
    外部中断寄存器方式
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-6-6 23:19:16 | 显示全部楼层
    继续讨论寄存器方式
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-6-6 23:22:40 | 显示全部楼层
    void UsartInit(void)
    {
           
              RCC->AHBCCR |= RCC_AHBCCR_PAEN;//IO
        RCC->APB1CCR |= RCC_APB1PERIPH_USART2;//USARTCLK
                    GPIOA->AFS[0] = 0x1100;//IO AFS 2,3
           
              GPIOA->OSPD |= 0xffffffff;//speed
              GPIOA->PUPD |= 0x00555000;//up
              GPIOA->OMODE |= 0x0700;   //Êä³öÀàÐÍ
              GPIOA->CTLR |= 0x005500a0;//Êä³öģʽ
              GPIOA->DOR |= 0x00000000; //Êä³öÄÚÈÝ
              
              USART2->BRR = 0x000016c0;//9600@28MHZ
              USART2->CTLR1 |= 0x00001000;
              USART2->CTLR2 &= ~0x00003000;
              USART2->CTLR3 &= ~0x00002000;
              USART2->CTLR1 |= 0x00000400;//PCEN
              USART2->CTLR1 |= 0x000000a0;
              USART2->CTLR1 |= USART_CTLR1_UEN;
           
                    NVIC_SetPriorityGrouping(0x00000000);//ÖжÏÓÅÏȼ¶
                    NVIC_EnableIRQ(USART2_IRQn);//ÖжÏ
    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-6-6 23:23:14 | 显示全部楼层
    void USART2_IRQHandler(void)
    {
        if ((USART2->STR & USART_FLAG_RBNE) != (uint16_t)RESET)
        {
            USART2->SCR = USART_FLAG_RBNE;
        }
                    if ((USART2->STR & USART_FLAG_TBE) != (uint16_t)RESET)
        {
            USART2->SCR = USART_FLAG_TBE;
                              USART2->TDTR = (uint32_t)txbuf[txpt];
                              txpt = txpt + 1;
                              txpt &= 0x1f;
        }
    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-29 09:22
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-6-6 23:23:50 | 显示全部楼层
    void TIMER6_DAC_IRQHandler(void)
    {
        if(((TIMER6->STR & TIMER_INT_UPDATE) == (uint16_t)SET) && ((TIMER6->DIE & TIMER_INT_UPDATE) == (uint16_t)SET)){
                       TIMER6->STR = (uint16_t)~TIMER_INT_UPDATE;
                             tim[0] = tim[0] + 1;
                           
                    }
    }       
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 07:07 , Processed in 0.226861 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.