0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GD32F310定时器采样MP6050并在彩色LCD上显示波形

冬至配饺子 来源:兆易创新GD32 MCU 作者:zhai 2022-09-23 17:45 次阅读

1.开发环境

(1)IAR8.4
(2)MPU6050 1.8寸显示屏

2.软件

(1)MPU6050陀螺仪驱动

i2C配置:

void i2c0_gpio_config(void)
{

rcu_periph_clock_enable(RCU_GPIOB);
rcu_periph_clock_enable(RCU_I2C0);  
gpio_af_set(GPIOB, GPIO_AF_1, GPIO_PIN_6);
gpio_af_set(GPIOB, GPIO_AF_1, GPIO_PIN_7);
gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_6);
gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_7);
gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_7);

}

void i2c_config(void)
{

i2c_clock_config(I2C0, 200000, I2C_DTCY_2);
i2c_mode_addr_config(I2C0, I2C_I2CMODE_ENABLE,     I2C_ADDFORMAT_7BITS, SlaveAddress);
i2c_enable(I2C0);
i2c_ack_config(I2C0, I2C_ACK_ENABLE);

}

uint8_t Read_Byte(uint16_t SlaveAddr,uint16_t ReadAddr, uint8_t *DataByte)
{

uint8_t err = 1;
i2c_start_on_bus(I2C0);                            
while(!i2c_flag_get(I2C0, I2C_FLAG_SBSEND));    
i2c_master_addressing(I2C0, SlaveAddr<<1, I2C_TRANSMITTER); 
while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND));    
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);            
while(!i2c_flag_get(I2C0, I2C_FLAG_TBE));        
i2c_data_transmit(I2C0, ReadAddr);    
while(!i2c_flag_get(I2C0, I2C_FLAG_TBE));    
i2c_start_on_bus(I2C0);                            
while(!i2c_flag_get(I2C0, I2C_FLAG_SBSEND));    
i2c_master_addressing(I2C0, SlaveAddr<<1, I2C_RECEIVER);     
while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND));    
i2c_ack_config(I2C0, I2C_ACK_DISABLE);            
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);            
i2c_stop_on_bus(I2C0);                            
while(!i2c_flag_get(I2C0, I2C_FLAG_RBNE));        
*DataByte  = i2c_data_receive(I2C0);            
i2c_ack_config(I2C0, I2C_ACK_ENABLE);            
err = 0;
return err;

}

uint8_t Write_Byte(uint16_t SlaveAddr,uint16_t WriteAddr,uint16_t WriteByte)
{

uint8_t err = 0;    
i2c_start_on_bus(I2C0);                            
while(!i2c_flag_get(I2C0, I2C_FLAG_SBSEND));    
i2c_master_addressing(I2C0, SlaveAddr<<1, I2C_TRANSMITTER);
while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND));    
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);            
while(!i2c_flag_get(I2C0, I2C_FLAG_TBE));        
i2c_data_transmit(I2C0, WriteAddr);                
while(!i2c_flag_get(I2C0, I2C_FLAG_TBE));        
i2c_data_transmit(I2C0, WriteByte);                
while(!i2c_flag_get(I2C0, I2C_FLAG_TBE));        
i2c_stop_on_bus(I2C0);                            
return err;

}

陀螺仪初始化:

void mpu6050_init(){

Write_Byte( SlaveAddress, PWR_MGMT_1,  0x00 );
delay_1ms(10);
Write_Byte( SlaveAddress, SMPLRT_DIV,  0x07 );
delay_1ms(10);

Write_Byte( SlaveAddress, CONFIG, 0x06 );
delay_1ms(10);


Write_Byte( SlaveAddress, GYRO_CONFIG,  0x18);
delay_1ms(10);
Write_Byte( SlaveAddress, ACCEL_CONFIG,  0x01);
delay_1ms(10);

}

void GetData(uint16_t SlaveAddr,uint16_t REG_Address,short data[3])
{

uint8_t H=0,L=0;

for(int i=0;i<3;i++){
    Read_Byte(SlaveAddress, REG_Address+(i*2), &H);
    Read_Byte( SlaveAddress, REG_Address+(i*2+1),&L); 
   data[i]=(( short)(H<<8))|L;

}

(2)LCD驱动

驱动:

void LCD_GPIO_Init(void)
{


     rcu_periph_clock_enable(RCU_GPIOA);
     gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
     gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
     gpio_bit_set(GPIOA,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);

}

void LCD_Writ_Bus(uint8_t dat)
{

uint8_t i;
LCD_CS_Clr();
for(i=0;i<8;i++)
{              
    LCD_SCLK_Clr();
    if(dat&0x80)
    {
       LCD_MOSI_Set();
    }
    else
    {
       LCD_MOSI_Clr();
    }
    LCD_SCLK_Set();
    dat<<=1;
}    

LCD_CS_Set();

}

void LCD_WR_DATA8(uint8_t dat)
{

LCD_Writ_Bus(dat);

}

void LCD_WR_DATA(uint16_t dat)
{

LCD_Writ_Bus(dat>>8);
LCD_Writ_Bus(dat);

}

void LCD_WR_REG(uint8_t dat)
{

LCD_DC_Clr();//д????
LCD_Writ_Bus(dat);
LCD_DC_Set();//д????

}

void LCD_Address_Set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
{

if(USE_HORIZONTAL==0)
{
    LCD_WR_REG(0x2a);//?е??????
    LCD_WR_DATA(x1+2);
    LCD_WR_DATA(x2+2);
    LCD_WR_REG(0x2b);//?е??????
    LCD_WR_DATA(y1+1);
    LCD_WR_DATA(y2+1);
    LCD_WR_REG(0x2c);//??????д
}
else if(USE_HORIZONTAL==1)
{
    LCD_WR_REG(0x2a);//?е??????
    LCD_WR_DATA(x1+2);
    LCD_WR_DATA(x2+2);
    LCD_WR_REG(0x2b);//?е??????
    LCD_WR_DATA(y1+1);
    LCD_WR_DATA(y2+1);
    LCD_WR_REG(0x2c);//??????д
}
else if(USE_HORIZONTAL==2)
{
    LCD_WR_REG(0x2a);//?е??????
    LCD_WR_DATA(x1+1);
    LCD_WR_DATA(x2+1);
    LCD_WR_REG(0x2b);//?е??????
    LCD_WR_DATA(y1+2);
    LCD_WR_DATA(y2+2);
    LCD_WR_REG(0x2c);//??????д
}
else
{
    LCD_WR_REG(0x2a);//?е??????
    LCD_WR_DATA(x1+1);
    LCD_WR_DATA(x2+1);
    LCD_WR_REG(0x2b);//?е??????
    LCD_WR_DATA(y1+2);
    LCD_WR_DATA(y2+2);
    LCD_WR_REG(0x2c);//??????д
}

}

void LCD_Init(void)
{

LCD_GPIO_Init();

LCD_RES_Clr();
delay_1ms(100);
LCD_RES_Set();
delay_1ms(100);

LCD_BLK_Set();
    delay_1ms(100);


delay_1ms(120);             

LCD_WR_REG(0xB1); 
LCD_WR_DATA8(0x05); 
LCD_WR_DATA8(0x3C); 
LCD_WR_DATA8(0x3C); 
LCD_WR_REG(0xB2); 
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C); 
LCD_WR_DATA8(0x3C); 
LCD_WR_REG(0xB3); 
LCD_WR_DATA8(0x05); 
LCD_WR_DATA8(0x3C); 
LCD_WR_DATA8(0x3C); 
LCD_WR_DATA8(0x05); 
LCD_WR_DATA8(0x3C); 
LCD_WR_DATA8(0x3C); 

LCD_WR_REG(0xB4); //Dot inversion 
LCD_WR_DATA8(0x03); 

LCD_WR_REG(0xC0); 
LCD_WR_DATA8(0x28); 
LCD_WR_DATA8(0x08); 
LCD_WR_DATA8(0x04); 
LCD_WR_REG(0xC1); 
LCD_WR_DATA8(0XC0); 
LCD_WR_REG(0xC2); 
LCD_WR_DATA8(0x0D); 
LCD_WR_DATA8(0x00); 
LCD_WR_REG(0xC3); 
LCD_WR_DATA8(0x8D); 
LCD_WR_DATA8(0x2A); 
LCD_WR_REG(0xC4); 
LCD_WR_DATA8(0x8D); 
LCD_WR_DATA8(0xEE); 

LCD_WR_REG(0xC5); //VCOM 
LCD_WR_DATA8(0x1A); 
LCD_WR_REG(0x36); //MX, MY, RGB mode 
if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00);
else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0);
else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70);
else LCD_WR_DATA8(0xA0); 

LCD_WR_REG(0xE0); 
LCD_WR_DATA8(0x04); 
LCD_WR_DATA8(0x22); 
LCD_WR_DATA8(0x07); 
LCD_WR_DATA8(0x0A); 
LCD_WR_DATA8(0x2E); 
LCD_WR_DATA8(0x30); 
LCD_WR_DATA8(0x25); 
LCD_WR_DATA8(0x2A); 
LCD_WR_DATA8(0x28); 
LCD_WR_DATA8(0x26); 
LCD_WR_DATA8(0x2E); 
LCD_WR_DATA8(0x3A); 
LCD_WR_DATA8(0x00); 
LCD_WR_DATA8(0x01); 
LCD_WR_DATA8(0x03); 
LCD_WR_DATA8(0x13); 
LCD_WR_REG(0xE1); 
LCD_WR_DATA8(0x04); 
LCD_WR_DATA8(0x16); 
LCD_WR_DATA8(0x06); 
LCD_WR_DATA8(0x0D); 
LCD_WR_DATA8(0x2D); 
LCD_WR_DATA8(0x26); 
LCD_WR_DATA8(0x23); 
LCD_WR_DATA8(0x27); 
LCD_WR_DATA8(0x27); 
LCD_WR_DATA8(0x25); 
LCD_WR_DATA8(0x2D); 
LCD_WR_DATA8(0x3B); 
LCD_WR_DATA8(0x00); 
LCD_WR_DATA8(0x01); 
LCD_WR_DATA8(0x04); 
LCD_WR_DATA8(0x13); 
//------------------------------------End ST7735S Gamma Sequence-----------------------------// 
LCD_WR_REG(0x3A); //65k mode 
LCD_WR_DATA8(0x05); 
LCD_WR_REG(0x29); //Display on 

}

显示函数:

void LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color)
{

uint16_t i,j; 
LCD_Address_Set(xsta,ysta,xend-1,yend-1);//?????????Χ
for(i=ysta;i

}

void LCD_DrawPoint(uint16_t x,uint16_t y,uint16_t color)
{

LCD_Address_Set(x,y,x,y);//???ù??λ?? 
LCD_WR_DATA(color);

}

void LCD_DrawLine(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2,uint16_t color)
{

uint16_t t; 
int xerr=0,yerr=0,delta_x,delta_y,distance;
int incx,incy,uRow,uCol;
delta_x=x2-x1; //???????????? 
delta_y=y2-y1;
uRow=x1;//???????????
uCol=y1;
if(delta_x>0)incx=1; //??????????? 
else if (delta_x==0)incx=0;//????? 
else {incx=-1;delta_x=-delta_x;}
if(delta_y>0)incy=1;
else if (delta_y==0)incy=0;//???? 
else {incy=-1;delta_y=-delta_y;}
if(delta_x>delta_y)distance=delta_x; //???????????????? 
else distance=delta_y;
for(t=0;tdistance)
    {
        xerr-=distance;
        uRow+=incx;
    }
    if(yerr>distance)
    {
        yerr-=distance;
        uCol+=incy;
    }
}

}

void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2,uint16_t color)
{

LCD_DrawLine(x1,y1,x2,y1,color);
LCD_DrawLine(x1,y1,x1,y2,color);
LCD_DrawLine(x1,y2,x2,y2,color);
LCD_DrawLine(x2,y1,x2,y2,color);

}

void Draw_Circle(uint16_t x0,uint16_t y0,uint8_t r,uint16_t color)
{

int a,b;
a=0;b=r;      
while(a<=b)
{
    LCD_DrawPoint(x0-b,y0-a,color);                    
    LCD_DrawPoint(x0+b,y0-a,color);                       
    LCD_DrawPoint(x0-a,y0+b,color);                            
    LCD_DrawPoint(x0-a,y0-b,color);                        
    LCD_DrawPoint(x0+b,y0+a,color);                         
    LCD_DrawPoint(x0+a,y0-b,color);            
    LCD_DrawPoint(x0+a,y0+b,color);              
    LCD_DrawPoint(x0-b,y0+a,color);             
    a++;
    if((a*a+b*b)>(r*r))
    {
        b--;
    }
}

}

void LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint16_t fc,uint16_t bc,uint8_t sizey,uint8_t mode)
{

uint8_t temp,sizex,t,m=0;
uint16_t i,TypefaceNum;
uint16_t x0=x;
sizex=sizey/2;
TypefaceNum=(sizex/8+((sizex%8)?1:0))*sizey;
num=num-' ';   
LCD_Address_Set(x,y,x+sizex-1,y+sizey-1); 
for(i=0;i

}

void LCD_ShowString(uint16_t x,uint16_t y,const uint8_t *p,uint16_t fc,uint16_t bc,uint8_t sizey,uint8_t mode)
{

while(*p!='�')
{       
    LCD_ShowChar(x,y,*p,fc,bc,sizey,mode);
    x+=sizey/2;
    p++;
}  

}

uint32_t mypow(uint8_t m,uint8_t n)
{

uint32_t result=1;     
while(n--)result*=m;
return result;

}

void LCD_ShowIntNum(uint16_t x,uint16_t y,uint16_t num,uint8_t len,uint16_t fc,uint16_t bc,uint8_t sizey)
{

uint8_t t,temp;
uint8_t enshow=0;
uint8_t sizex=sizey/2;
for(t=0;t

}

void LCD_ShowFloatNum1(uint16_t x,uint16_t y,float num,uint8_t len,uint16_t fc,uint16_t bc,uint8_t sizey)
{

uint8_t t,temp,sizex;
uint16_t num1;
sizex=sizey/2;
num1=num*100;
for(t=0;t

}

(3)主函数

void gd_led_config(void);
void gd_led_toggle(void);

int data[128]={0},data2[128]={0},data3[128]={0};
short Acc[3],Gyro[3];

void TIMER2_IRQHandler(void) {

if(SET == timer_interrupt_flag_get(TIMER2, TIMER_INT_FLAG_UP)){
    /* clear channel 0 interrupt bit */
    timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP);
            
            
            
            GetData(SlaveAddress,ACCEL_XOUT_H,Acc);
            GetData(SlaveAddress,GYRO_XOUT_H,Gyro);    
           
    gd_led_toggle();
}

}

void nvic_config(void)
{

nvic_irq_enable(TIMER2_IRQn, 0, 0);

}

void timer_config(void)
{

TIMER2 Configuration:
TIMER2CLK = SystemCoreClock/8400(GD32F330)or 10800(GD32F350) = 10KHz.
the period is 1s(10000/10000 = 1s).

timer_oc_parameter_struct timer_ocinitpara;
timer_parameter_struct timer_initpara;

/* enable the peripherals clock */
rcu_periph_clock_enable(RCU_TIMER2);

/* deinit a TIMER */
timer_deinit(TIMER2);
/* initialize TIMER init parameter struct */
timer_struct_para_init(&timer_initpara);
/* TIMER2 configuration */


timer_initpara.prescaler         = 4999;
timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection  = TIMER_COUNTER_UP;
timer_initpara.period            = 999;
timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
timer_init(TIMER2, &timer_initpara);

/* clear channel 0 interrupt bit */
timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP);
/* enable the TIMER interrupt */
timer_interrupt_enable(TIMER2, TIMER_INT_UP);
/* enable a TIMER */
timer_enable(TIMER2);

}

int main(void)
{

gd_led_config();
systick_config();

 
i2c0_gpio_config();

i2c_config();

mpu6050_init();

LCD_Init();
LCD_Fill(0,0,LCD_W,LCD_H,BLACK);
//LCD_ShowString(0,0,"Hellow GD32F310G8!",WHITE,BLUE,12,0);

  
timer_config();
/* configure the TIMER2 interrupt */
nvic_config();



while(1) {
  
  
  
  
   
                        
                   
          for(int i=0;i<128;i++){
           LCD_DrawPoint( i, data[i],RED);
           LCD_DrawPoint( i, data2[i],GREEN);
           LCD_DrawPoint( i, data3[i],BLUE);
             }
          delay_1ms(10);

         for(int i=0;i<128;i++){
          LCD_DrawPoint( i, data[i],BLACK);
          LCD_DrawPoint( i, data2[i],BLACK);
          LCD_DrawPoint( i, data3[i],BLACK);
          }
 
         for(int i=0;i<127;i++){
          data[i]=data[i+1];
          data2[i]=data2[i+1];
         data3[i]=data3[i+1];
 }

 data[127]=20+(int)(((float)Gyro[0])/164);
 data2[127]=60+(int)(((float)Gyro[1])/164);
 data3[127]=100+(int)(((float)Gyro[2])/164);
                
 
  
 
 
  //char cpd[10];
   //sprintf(cpd,"%d",Acc[0]);
   
   //LCD_ShowString(0,0,cpd,WHITE,BLUE,12,0);

 

}

}

void gd_led_config(void)
{

rcu_periph_clock_enable(RCU_GPIOA);


gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);

GPIO_BC(GPIOA) = GPIO_PIN_1;

}

void gd_led_toggle(void)
{

GPIO_TG(GPIOA) = GPIO_PIN_1;

}

3.效果

GD32存在一个问题,用队列缓冲陀螺仪数据时,运行数秒后死机。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 陀螺仪
    +关注

    关注

    44

    文章

    728

    浏览量

    97658
  • LCD显示器
    +关注

    关注

    0

    文章

    85

    浏览量

    19979
  • GD32
    +关注

    关注

    7

    文章

    332

    浏览量

    23732
收藏 人收藏

    评论

    相关推荐

    GD32F310开发板实现四线OLED显示的设计

    1、在GD32F310开发板实现四线OLED显示的设计  本次采用四线OLED与开发板实现通信,使用模拟IIC方式,在自己平时的应用中OLED屏幕还是用的比较多的,本文目标是实现OLED显示功能
    发表于 08-31 15:25

    基于GD32F310开发板的定时器和PWM产生简介及特点

    高级定时器:(TIMER0)高级定时器(TIMER0)是四通道定时器,支持输入捕获和输出比较。可以产生 PWM 信号控制电机和电源管理。高级定时器含有一个 16 位无符号计数
    发表于 09-28 15:50

    基于GD32F310 定时器中编码接口的简介及特点

    2000编码模式2:编码旋转一周计数计数 4000注意: "-" 意思是"无计数"; "X" 意思是不可能。在【GD32F310
    发表于 09-28 15:53

    基于GD32F310开发板完成超频及ADC极限采样率实验

    1、ADC极限采样率实验  项目为用单片机采集VGA图像的应用,当前所用的单片机为GD32F330,用于降成本的替代方案原本选择的是GD32E230,咨询过代理商那边说是新出的GD32F310
    发表于 09-29 15:35

    GD32F310对浮点DSP运算及Modbus移植进行测评

    1. 测评背景GD32作为国产化ARM中的旗舰,其全系列产品不仅市场占有率高,而且各具特色,广受使用者好评。笔者在测评这款GD32F310之前,曾经使用过GD32F450,其强大的性能,低廉的价格
    发表于 09-30 11:09

    基于GD32F310开发板的CMSIS-DAP烧录与定时器采集脉宽问题

    1、CMSIS-DAP电只能烧录一次问题解决&定时器脉宽采集  GD32F310拥有TSSOP20、QFN28、QFN32、LQFP32以及LQFP48共5种封装类型,采用Arm
    发表于 09-30 12:04

    基于GD32F310开发板的AD多通道交流采样计算

    GD32F310这个核心板,通过本人已有的外围电路将继保测试仪的交流电压信号调理后采集到核心板。交流电压信号50HZ,要求每个周期采样32个点,那么每个通道采样频率为1600Hz(3
    发表于 09-30 14:29

    基于GD32F310开发板的RT-Thread Shell移植及调试心得

      GD32F310系列采用Arm Cortex-M4内核,主频达到72MHz,配备了16KB到64KB的嵌入式闪存及4KB到8KB的SRAM。片上集成了多达5个16位通用定时器、1个16位基本定时器和1
    发表于 09-30 14:47

    基于GD32F310开发板移植FreeRTOS的步骤详解

    1、GD32F310移植FreeRTOS  开发板信息  我们在来看看关于这款开发板:  GD32F310K-START 评估板使用 GD32F310K8T6 作为主控制。LED的引
    发表于 10-10 18:07

    GD电机驱动底层配置—永磁同步电机控制

    ,可使GD32F310系列广泛应用于永磁同步电机控制领域。本文将介绍应用于电机控制时,高级定时器和ADC的配置过程。  底层驱动配置  GD32F310中的高级定时器TIMER0是一个
    发表于 10-13 14:29

    Contiki-NG在GD32F310的移植概述

    ,本篇就不对这些原理进行叙述。Contiki-NG移植移植说明本文的Contiki-NG移植是在下载的源码中添加GD32F310平台。一个系统的适配不是一蹴而就的,需要对gpio、usart、timer
    发表于 10-21 15:24

    基于GD32F310开发板在rt-thread添加finsh及其shell功能

    1、GD32F310开发板试用+finsh/shell添加与进程STACK优化  一次只是移植了rt-thread nano的内核,但rt-thread的finsh/shell,是一大很有特点
    发表于 11-08 16:05

    利用GD32F310的I2C0实现对HDC1080的初始化及读取环境温湿度

    ,芯片内置64KB flash,8KB SRAM,两路I2C外设。  本次试用目的是利用GD32F310的I2C0实现对HDC1080的初始化及读取环境温湿度,并利用UART口在电脑显示出来。  新建
    发表于 11-08 16:24

    GD32F310开发板移植FreeRTOS的步骤相关资料分享

    1、GD32F310移植FreeRTOS  环境说明  首先我先说明我的环境:  我使用keil5的版本是V5.36,电脑系统是WIN10,使用的固件库版本是从官网下载的最新版2.2.0,我所移植
    发表于 11-08 16:58

    GD32F310定时器采样MP6050并在彩色LCD显示波形的操作过程

    ,LCD_W,LCD_H,BLACK);//LCD_ShowString(0,0,"Hellow GD32F310G8!",WHITE,BLUE,12,0);timer_config
    发表于 11-21 15:48