社区导航

 

搜索
查看: 471|回复: 9

[GD32F350作品提交] 基于GD32F350的LED玩具

[复制链接]

6849

TA的帖子

17

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-10-18 22:13:16 | 显示全部楼层 |阅读模式
本帖最后由 白丁 于 2018-10-19 20:36 编辑

LED玩具利用加速度传感器获取加速度,计算位置及加速度,将砂粒显示在LED显示屏上,砂砾随LED的角度流动、碰撞。
gd32_led_sand_toy.rar (9 MB, 下载次数: 7)
training


回复

使用道具 举报

6849

TA的帖子

17

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-10-18 22:13:51 | 显示全部楼层
本帖最后由 白丁 于 2018-10-19 20:49 编辑

   系统框图
搜狗截图20181019204736.png

LED_SAND_TOY.docx

2.38 MB, 下载次数: 10

training


回复

使用道具 举报

992

TA的帖子

2

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-10-19 08:31:02 | 显示全部楼层
这创意不错,

点评

这个主要用来发呆,想做成个魔方形式的,六面的,不过找不到合适的LED屏  详情 回复 发表于 2018-10-19 10:43
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void


回复

使用道具 举报

6849

TA的帖子

17

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-10-19 10:43:09 | 显示全部楼层

这个主要用来发呆,想做成个魔方形式的,六面的,不过找不到合适的LED屏
training


回复

使用道具 举报

6849

TA的帖子

17

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-10-19 20:49:45 | 显示全部楼层
HUB75 RGB LED显示
下表为GB32HUB75接口32*16LED显示屏的连接;
HUB75接口中RGB为红黄蓝颜色数据线,ABC为线选, SCK为时钟,STR为锁存,OE为使能。
  
GD32 pin
  
PB14
PB0
PB4
PB2
HUB75接口定义
G1
GND
G2
GND
B
GND
STR
GND
R1
B1
R2
B2
A
C
SCK
OE
GD32 pin
PB13
PB15
PB12
PB1
PB5
PB3
PB10
PB11
LED显示屏为RGB全彩显示屏,分为上下亮屏,上半屏8行,下半屏8行,公用ABC三根线进行线选。

training


回复

使用道具 举报

6849

TA的帖子

17

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-10-19 20:50:14 | 显示全部楼层
1.  #include "gd32f3x0.h"  
2.  #include "led75.h"  
3.  #include "gd32f3x0_gpio.h"  
4.  #include <assert.h>  
5.  uint8_t frame[WIDTH * HEIGHT];  
6.  void sda_r(unsigned int value)  
7.  {  
8.      gpio_bit_write(GPIOB, GPIO_PIN_13, (bit_status)value);  
9.  }  
10. void sda_g(unsigned int value)  
11. {  
12.     gpio_bit_write(GPIOB, GPIO_PIN_14, (bit_status)value);  
13. }  
14. void sda_b(unsigned int value)  
15. {  
16.     gpio_bit_write(GPIOB, GPIO_PIN_15, (bit_status)value);  
17. }  
18. void sda_rg(unsigned int value)  
19. {  
20.     gpio_bit_write(GPIOB, GPIO_PIN_13, (bit_status)value);  
21.     gpio_bit_write(GPIOB, GPIO_PIN_14, (bit_status)value);  
22. }  
23. void sda_gb(unsigned int value)  
24. {  
25.     gpio_bit_write(GPIOB, GPIO_PIN_14, (bit_status)value);  
26.     gpio_bit_write(GPIOB, GPIO_PIN_15, (bit_status)value);  
27. }  
28. void sda_rb(unsigned int value)  
29. {  
30.     gpio_bit_write(GPIOB, GPIO_PIN_13, (bit_status)value);  
31.     gpio_bit_write(GPIOB, GPIO_PIN_15, (bit_status)value);  
32. }  
33. void sda_rgb(unsigned int value)  
34. {  
35.     gpio_bit_write(GPIOB, GPIO_PIN_13, (bit_status)value);  
36.     gpio_bit_write(GPIOB, GPIO_PIN_14, (bit_status)value);  
37.     gpio_bit_write(GPIOB, GPIO_PIN_15, (bit_status)value);  
38. }  
39. void sda_rs(unsigned int value)  
40. {  
41.     gpio_bit_write(GPIOB, GPIO_PIN_12, (bit_status)value);  
42. }  
43. void sda_gs(unsigned int value)  
44. {  
45.     gpio_bit_write(GPIOB, GPIO_PIN_0, (bit_status)value);  
46. }  
47. void sda_bs(unsigned int value)  
48. {  
49.     gpio_bit_write(GPIOB, GPIO_PIN_1, (bit_status)value);  
50. }  
51. void sda_rgs(unsigned int value)  
52. {  
53.     gpio_bit_write(GPIOB, GPIO_PIN_12, (bit_status)value);  
54.     gpio_bit_write(GPIOB, GPIO_PIN_0, (bit_status)value);  
55. }  
56. void sda_gbs(unsigned int value)  
57. {  
58.     gpio_bit_write(GPIOB, GPIO_PIN_0, (bit_status)value);  
59.     gpio_bit_write(GPIOB, GPIO_PIN_1, (bit_status)value);  
60. }  
61. void sda_rbs(unsigned int value)  
62. {  
63.     gpio_bit_write(GPIOB, GPIO_PIN_12, (bit_status)value);  
64.     gpio_bit_write(GPIOB, GPIO_PIN_1, (bit_status)value);  
65. }  
66. void sda_rgbs(unsigned int value)  
67. {  
68.     gpio_bit_write(GPIOB, GPIO_PIN_12, (bit_status)value);  
69.     gpio_bit_write(GPIOB, GPIO_PIN_0, (bit_status)value);  
70.     gpio_bit_write(GPIOB, GPIO_PIN_1, (bit_status)value);  
71. }  
72. color_select_t led1[7] = {sda_r, sda_g, sda_b, sda_rg, sda_gb, sda_rb, sda_rgb};  
73. color_select_t led2[7] = {sda_rs, sda_gs, sda_bs, sda_rgs, sda_gbs, sda_rbs, sda_rgbs};  
74. void (*led1_send_data)(unsigned int);  
75. void (*led2_send_data)(unsigned int);  
76. void shcp_set(void)  
77. {  
78.     gpio_bit_set(GPIOB, GPIO_PIN_10);  
79. }  
80. void shcp_clear(void)  
81. {  
82.     gpio_bit_reset(GPIOB, GPIO_PIN_10);  
83. }  
84. void stcp_set(void)  
85. {  
86.     gpio_bit_set(GPIOB, GPIO_PIN_2);  
87. }  
88. void stcp_clear(void)  
89. {  
90.     gpio_bit_reset(GPIOB, GPIO_PIN_2);  
91. }  
92. void oe_set(void)  
93. {  
94.     gpio_bit_set(GPIOB, GPIO_PIN_11);  
95. }  
96. void oe_clear(void)  
97. {  
98.     gpio_bit_reset(GPIOB, GPIO_PIN_11);  
99. }  
100. void led75_abc_control(unsigned int abc, unsigned int on_off)  
101. {  
102.     switch(abc)  
103.     {  
104.         case LED75_A:  
105.             gpio_bit_write(LED75_A_PORT, LED75_A_PIN, (bit_status)on_off);  
106.             break;  
107.         case LED75_B:  
108.             gpio_bit_write(LED75_B_PORT, LED75_B_PIN, (bit_status)on_off);  
109.             break;  
110.         case LED75_C:  
111.             gpio_bit_write(LED75_C_PORT, LED75_C_PIN, (bit_status)on_off);  
112.             break;  
113.         default:  
114.             //assert(0);  
115.             break;  
116.     }  
117. }  
118. void line_scan(unsigned int line)  
119. {  
120.     switch(line)  
121.     {  
122.         case 0:  
123.             led75_abc_control(LED75_A, 0);  
124.             led75_abc_control(LED75_B, 0);  
125.             led75_abc_control(LED75_C, 0);  
126.             break;  
127.         case 1:  
128.             led75_abc_control(LED75_A, 1);  
129.             led75_abc_control(LED75_B, 0);  
130.             led75_abc_control(LED75_C, 0);  
131.             break;  
132.         case 2:  
133.             led75_abc_control(LED75_A, 0);  
134.             led75_abc_control(LED75_B, 1);  
135.             led75_abc_control(LED75_C, 0);  
136.             break;  
137.         case 3:  
138.             led75_abc_control(LED75_A, 1);  
139.             led75_abc_control(LED75_B, 1);  
140.             led75_abc_control(LED75_C, 0);  
141.             break;  
142.         case 4:  
143.             led75_abc_control(LED75_A, 0);  
144.             led75_abc_control(LED75_B, 0);  
145.             led75_abc_control(LED75_C, 1);  
146.             break;  
147.         case 5:  
148.             led75_abc_control(LED75_A, 1);  
149.             led75_abc_control(LED75_B, 0);  
150.             led75_abc_control(LED75_C, 1);  
151.             break;  
152.         case 6:  
153.             led75_abc_control(LED75_A, 0);  
154.             led75_abc_control(LED75_B, 1);  
155.             led75_abc_control(LED75_C, 1);  
156.             break;  
157.         case 7:  
158.             led75_abc_control(LED75_A, 1);  
159.             led75_abc_control(LED75_B, 1);  
160.             led75_abc_control(LED75_C, 1);  
161.             break;  
162.         default:  
163.             break;  
164.     }  
165. }  
166. void led_delay(unsigned int cnt)  
167. {  
168.     volatile unsigned int i;  
169.     for(i=0; i<cnt; i++)  
170.     {  
171.         __NOP;  
172.     }  
173. }  
174. void led_matrix_display(void)  
175. {  
176.     unsigned int i, j;  
177.     unsigned int color;  
178.     oe_set();  
179.     /* 8 line per led */  
180.     for(i=0; i<8; i++)  
181.     {  
182.         color = i;  
183.         led1_send_data = led1[color].proc;  
184.         led2_send_data = led2[color].proc;  
185.         sda_rgb(0);  
186.         sda_rgbs(0);  
187.         for(j=0; j<WIDTH; j++)  
188.         {  
189.             shcp_clear();  
190.             (*led1_send_data)(frame[i * WIDTH + j]);  
191.             (*led2_send_data)(frame[(i + 8) * WIDTH + j]);  
192.             shcp_set();  
193.         }  
194.         line_scan(i);  
195.         stcp_clear();  
196.         stcp_set();  
197.         oe_clear();  
198.         //delay_us(100);  
199.         led_delay(0x2ff);  
200.         oe_set();  
201.     }  
202. }  


training


回复

使用道具 举报

6849

TA的帖子

17

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-10-19 20:50:40 | 显示全部楼层
MPU6050内部整合了3轴陀螺仪和3轴加速度传感器,通过IIC接口与GD32通信,通信速率400Khz。该设计中使用GD32F350IIC0,即PB6 SCL,PB7SDA
file:///C:/Users/gt/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
MPU6050固定到LED显示屏上file:///C:/Users/gt/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
MPU6050驱动代码如下:
1.  #include "gd32f3x0.h"  
2.  #include "mpu6050.h"  
3.  #include <stdio.h>  
4.   
5.  mpu6050_accel_t mpu6050_accel;  
6.  mpu6050_gyro_t  mpu6050_gyro;  
7.   
8.  void mpu6050_write_1byte(unsigned char reg_addr, unsigned char data)  
9.  {  
10.     while(i2c_flag_get(MPU6050_IIC_DEV, I2C_FLAG_I2CBSY));  
11.     i2c_start_on_bus(MPU6050_IIC_DEV);  
12.     while(!i2c_flag_get(MPU6050_IIC_DEV, I2C_FLAG_SBSEND));  
13.     i2c_master_addressing(MPU6050_IIC_DEV, SLAVE_ADDRESS, I2C_TRANSMITTER);  
14.     while(!i2c_flag_get(MPU6050_IIC_DEV, I2C_FLAG_ADDSEND));  
15.     i2c_flag_clear(MPU6050_IIC_DEV, I2C_FLAG_ADDSEND);  
16.     while(!i2c_flag_get(MPU6050_IIC_DEV, I2C_FLAG_TBE));  
17.     i2c_data_transmit(MPU6050_IIC_DEV, reg_addr);  
18.     while(!i2c_flag_get(MPU6050_IIC_DEV, I2C_FLAG_BTC));  
19.     i2c_data_transmit(MPU6050_IIC_DEV, data);  
20.     while(!i2c_flag_get(MPU6050_IIC_DEV, I2C_FLAG_BTC));  
21.     i2c_stop_on_bus(MPU6050_IIC_DEV);  
22.     while(I2C_CTL0(MPU6050_IIC_DEV)&0x0200);  
23. }  
24.   
25. unsigned char mpu6050_read_1byte(unsigned char reg_addr)  
26. {  
27.     unsigned char   data;  
28.     while(i2c_flag_get(MPU6050_IIC_DEV, I2C_FLAG_I2CBSY));  
29.     i2c_start_on_bus(MPU6050_IIC_DEV);  
30.     while(!i2c_flag_get(MPU6050_IIC_DEV, I2C_FLAG_SBSEND));  
31.     i2c_master_addressing(MPU6050_IIC_DEV, SLAVE_ADDRESS, I2C_TRANSMITTER);  
32.     while(!i2c_flag_get(MPU6050_IIC_DEV, I2C_FLAG_ADDSEND));  
33.     i2c_flag_clear(MPU6050_IIC_DEV, I2C_FLAG_ADDSEND);  
34.     i2c_data_transmit(MPU6050_IIC_DEV, reg_addr);  
35.     while(!i2c_flag_get(MPU6050_IIC_DEV, I2C_FLAG_BTC));  
36.     i2c_start_on_bus(MPU6050_IIC_DEV);  
37.     while(!i2c_flag_get(MPU6050_IIC_DEV, I2C_FLAG_SBSEND));  
38.     i2c_master_addressing(MPU6050_IIC_DEV, SLAVE_ADDRESS, I2C_RECEIVER);  
39.     while(!i2c_flag_get(MPU6050_IIC_DEV, I2C_FLAG_ADDSEND));  
40.     i2c_flag_clear(MPU6050_IIC_DEV, I2C_FLAG_ADDSEND);  
41.   
42.     i2c_ack_config(MPU6050_IIC_DEV, I2C_ACK_DISABLE);  
43.     while(!i2c_flag_get(MPU6050_IIC_DEV, I2C_FLAG_RBNE));  
44.     data = i2c_data_receive(MPU6050_IIC_DEV);  
45.     i2c_stop_on_bus(MPU6050_IIC_DEV);  
46.     while(I2C_CTL0(MPU6050_IIC_DEV)&0x0200);  
47.     i2c_ack_config(MPU6050_IIC_DEV, I2C_ACK_DISABLE);  
48.   
49.     return data;  
50. }  
51.   
52. void mpu6050_accel_read(void)  
53. {  
54.     uint8_t h, l;  
55.     h = mpu6050_read_1byte(ACCEL_XOUT_H);  
56.     l = mpu6050_read_1byte(ACCEL_XOUT_L);  
57.     mpu6050_accel.x = (int16_t)((h << 8) | l);  
58.     h = mpu6050_read_1byte(ACCEL_YOUT_H);  
59.     l = mpu6050_read_1byte(ACCEL_YOUT_L);  
60.     mpu6050_accel.y = (int16_t)((h << 8) | l);  
61.     h = mpu6050_read_1byte(ACCEL_ZOUT_H);  
62.     l = mpu6050_read_1byte(ACCEL_ZOUT_L);  
63.     mpu6050_accel.z = (int16_t)((h << 8) | l);  
64. }  
65. void mpu6050_gypo_read(void)  
66. {  
67.     uint8_t h, l;  
68.     h = mpu6050_read_1byte(GYRO_XOUT_H);  
69.     l = mpu6050_read_1byte(GYRO_XOUT_L);  
70.     mpu6050_gyro.x = (int16_t)((h << 8) | l);  
71.     h = mpu6050_read_1byte(GYRO_YOUT_H);  
72.     l = mpu6050_read_1byte(GYRO_YOUT_L);  
73.     mpu6050_gyro.y = (int16_t)((h << 8) | l);  
74.     h = mpu6050_read_1byte(GYRO_ZOUT_H);  
75.     l = mpu6050_read_1byte(GYRO_ZOUT_L);  
76.     mpu6050_gyro.z = (int16_t)((h << 8) | l);  
77. }  
78.   
79. void mpu6050_init(void)  
80. {  
81.     mpu6050_write_1byte(PWR_MGMT_1, 0x00);  
82.     mpu6050_write_1byte(SMPLRT_DIV, 0x7);  
83.     mpu6050_write_1byte(CONFIG, 0x06);  
84.     mpu6050_write_1byte(GYRO_CONFIG, 0x18);   
85.     mpu6050_write_1byte(ACCEL_CONFIG, 0x09); ////+-4g  
86. }  


training


回复

使用道具 举报

6849

TA的帖子

17

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-10-19 20:51:00 | 显示全部楼层
将三维加速度转换为二维加速度,计算每个砂粒加速度。
1.  void calc_accel(void)  
2.  {  
3.      unsigned int i;  
4.      int ax, ay, az;  
5.      int az2;  
6.      int32_t v2;  
7.      float v;  
8.   
9.      ax = -mpu6050_accel.y / 256;  
10.     ay = -mpu6050_accel.x / 256;  
11.     az = abs(mpu6050_accel.z) / 2048;  
12.     az = (az >= 3) ? 1 : (4 - az);  
13.     ax -= az;  
14.     ay -= az;  
15.     az2 = az * 2 + 1;  
16.      
17.     for(i=0; i<N_GRAINS; i++)  
18.     {  
19.         grain.vx += ax + rand_s(az2);  
20.         grain.vy += ay + rand_s(az2);  
21.         v2 = (int32_t)(grain.vx * grain.vx) + (int32_t)(grain.vy * grain.vy);  
22.         if(v2 > 65536)  
23.         {  
24.             v = sqrt((float)v2);  
25.             grain.vx = (int)(256.0 * (float)grain.vx / v);  
26.             grain.vy = (int)(256.0 * (float)grain.vy / v);  
27.         }  
28.     }  
29. }  

计算砂砾位置写入显存数据帧;
1.  void calc_pos(void)  
2.  {  
3.      unsigned int i;  
4.      unsigned int oldidx, newidx, delta;  
5.      int newx, newy;      
6.   
7.      for(i=0; i<N_GRAINS; i++)  
8.      {  
9.          newx = grain.x + grain.vx;  
10.         newy = grain.y + grain.vy;  
11.   
12.         if(newx > MAX_X)  
13.         {  
14.             newx = MAX_X;  
15.             grain.vx /= -2;  
16.         }  
17.         else if(newx < 0)  
18.         {  
19.             newx = 0;  
20.             grain.vx /= -2;  
21.         }      
22.         if(newy > MAX_Y)   
23.         {  
24.             newy         = MAX_Y;  
25.             grain.vy /= -2;  
26.         }   
27.         else if(newy < 0)   
28.         {  
29.             newy         = 0;  
30.             grain.vy /= -2;  
31.         }  
32.         oldidx = (grain.y/256) * WIDTH + (grain.x/256); // Prior pixel #  
33.         newidx = (newy      /256) * WIDTH + (newx      /256); // New pixel #  
34.   
35.         /* the newidx has grain */  
36.         if((oldidx != newidx) && frame[newidx])  
37.         {  
38.             delta = abs(newidx - oldidx);  
39.             /* left or right has a grain */  
40.             if(1 == delta)  
41.             {  
42.                 newx = grain.x;  
43.                 grain.vx /= -2;  
44.                 newidx= oldidx;  
45.             }  
46.             /* up or down has a grain */  
47.             else if(WIDTH == delta)  
48.             {  
49.                 newy = grain.y;  
50.                 grain.vy /= -2;  
51.                 newidx = oldidx;  
52.             }  
53.             else  
54.             {  
55.                 /* x axis is faster */  
56.                 if((abs(grain.vx) - abs(grain.vy)) >= 0)  
57.                 {  
58.                     newidx = (grain.y / 256) * WIDTH + (newx / 256);  
59.                     if(!frame[newidx])  
60.                     {  
61.                         newy = grain.y;  
62.                         grain.vy /= -2;  
63.                     }  
64.                     else  
65.                     {  
66.                         newidx = (newy / 256) * WIDTH + (grain.x / 256);  
67.                         if(!frame[newidx])  
68.                         {  
69.                             newx = grain.x;  
70.                             grain.vx /= -2;  
71.                         }  
72.                         else  
73.                         {  
74.                             newx = grain.x;  
75.                             newy = grain.y;  
76.                             grain.vx /= -2;  
77.                             grain.vy /= -2;  
78.                             newidx = oldidx;  
79.                         }  
80.                     }  
81.                 }  
82.                 else //y axis is faster  
83.                 {  
84.                     newidx = (newy / 256) * WIDTH + (grain.x / 256);  
85.                     if(!frame[newidx])  
86.                     {  
87.                         newx = grain.x;  
88.                         grain.vy /= -2;  
89.                     }  
90.                     else  
91.                     {  
92.                         newidx = (grain.y / 256) * WIDTH + (newx / 256);  
93.                         if(!frame[newidx])  
94.                         {  
95.                             newy = grain.y;  
96.                             grain.vy /= -2;  
97.                         }  
98.                         else  
99.                         {  
100.                             newx = grain.x;  
101.                             newy = grain.y;  
102.                             grain.vx /= -2;  
103.                             grain.vy /= -2;  
104.                             newidx = oldidx;  
105.                         }  
106.                     }  
107.                 }  
108.             }  
109.         }  
110.         grain.x = newx;  
111.         grain.y = newy;  
112.         frame[oldidx] = 0;  
113.         frame[newidx] = 1;  
114.     }  
115. }  


training


回复

使用道具 举报

6849

TA的帖子

17

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-10-19 20:51:18 | 显示全部楼层
1.     使用的GD32F350外设
Ø  USART
USART初始化
Ø  rcu_periph_clock_enable(RCU_GPIOA);  
Ø     rcu_periph_clock_enable(RCU_USART1);  
Ø   
Ø     /* connect port to USART1_Tx */  
Ø     gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_2);  
Ø   
Ø     /* connect port to USART1_Rx */  
Ø     gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_3);  
Ø   
Ø     /* configure USART1 Tx as alternate function push-pull */  
Ø     gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_2);  
Ø     gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_2);  
Ø   
Ø     /* configure USART2 Rx as alternate function push-pull */  
Ø     gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_3);  
Ø     gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3);  
Ø   
Ø     /* USART1 configure */  
Ø     usart_deinit(USART1);  
Ø     usart_baudrate_set(USART1,115200);  
Ø     usart_receive_config(USART1, USART_RECEIVE_ENABLE);  
Ø     usart_transmit_config(USART1, USART_TRANSMIT_ENABLE);  
Ø     usart_enable(USART1);  

Ø  Iic
I2C初始化
1.  /* init iic0 for mpu6050 */  
2.  rcu_periph_clock_enable(RCU_GPIOB);  
3.  rcu_periph_clock_enable(RCU_I2C0);  
4.  /* connect port to I2C0 SCL */  
5.  gpio_af_set(GPIOB, GPIO_AF_1, GPIO_PIN_6);  
6.  /* connect port to I2C0 SDA */  
7.  gpio_af_set(GPIOB, GPIO_AF_1, GPIO_PIN_7);  
8.  gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_6);  
9.  gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_6);  
10. o_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_7);  
11. gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_7);  
12.   
13. i2c_deinit(I2C0);  
14. i2c_clock_config(I2C0, 400000, I2C_DTCY_2);  
15. i2c_mode_addr_config(I2C0, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, 0x0A);  
16. i2c_enable(I2C0);  
17. i2c_ack_config(I2C0, I2C_ACK_DISABLE);  

Ø  GPIO
GPIO初始化
Ø     /* init led display gpio */  
Ø  //rcu_periph_clock_enable(RCU_GPIOB);  
Ø  /*r g b*/  
Ø     gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,   
Ø                   GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);  
Ø  gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_2MHZ,   
Ø                             GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);  
Ø  /*rs gs bs*/  
Ø     gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,   
Ø                   GPIO_PIN_12|GPIO_PIN_0|GPIO_PIN_1);  
Ø  gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_2MHZ,   
Ø                             GPIO_PIN_12|GPIO_PIN_0|GPIO_PIN_1);  
Ø  /*ABC*/  
Ø     gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,   
Ø                   GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3);  
Ø  gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_2MHZ,   
Ø                             GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3);  
Ø     /*OE*/  
Ø     gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,   
Ø                   GPIO_PIN_11);  
Ø  gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_2MHZ,   
Ø                             GPIO_PIN_11);  
Ø  /*SCK*/  
Ø     gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,   
Ø                   GPIO_PIN_10);  
Ø  gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_2MHZ,   
Ø                             GPIO_PIN_10);  
Ø  /*STR*/  
Ø     gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,   
Ø                   GPIO_PIN_2);  
Ø     gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_2MHZ,   
Ø                             GPIO_PIN_2);  


training


回复

使用道具 举报

6849

TA的帖子

17

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-10-19 20:51:34 | 显示全部楼层
演示视频地址http://training.eeworld.com.cn/video/16136

training


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-1-22 22:38 , Processed in 0.315906 second(s), 17 queries , Gzip On, MemCache On.

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