void bsp_74hc165_gpio_config(void) { /* enable GPIO clock */ rcu_periph_clock_enable(HC165_PL_CLK); rcu_periph_clock_enable(HC165_CP_CLK); rcu_periph_clock_enable(HC165_OE_CLK); rcu_periph_clock_enable(HC165_DATA_CLK); /* configure GPIO port */ gpio_init(HC165_PL_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, HC165_PL_PIN); gpio_init(HC165_CP_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, HC165_CP_PIN); gpio_init(HC165_OE_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, HC165_OE_PIN); gpio_init(HC165_DATA_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, HC165_DATA_PIN); //RESET GPIO gpio_bit_reset(HC165_OE_PORT, HC165_OE_PIN); HC595_SHCP_Low(); HC595_STCP_Low(); HC595_Data_Low(); }根据这个gpio初始化代码,帮我补全74hc165级联读取数据的代码,我用的gd32f303芯片。
时间: 2023-08-03 22:07:41 浏览: 87
以下是74hc165级联读取数据的代码示例,供参考:
```
#define HC165_PL_PORT GPIOB
#define HC165_PL_PIN GPIO_PIN_0
#define HC165_CP_PORT GPIOB
#define HC165_CP_PIN GPIO_PIN_1
#define HC165_OE_PORT GPIOB
#define HC165_OE_PIN GPIO_PIN_2
#define HC165_DATA_PORT GPIOB
#define HC165_DATA_PIN GPIO_PIN_3
void bsp_74hc165_read(uint8_t *buf, uint8_t buf_size) {
uint8_t i, j, data;
gpio_bit_reset(HC165_PL_PORT, HC165_PL_PIN);
gpio_bit_reset(HC165_CP_PORT, HC165_CP_PIN);
gpio_bit_reset(HC165_OE_PORT, HC165_OE_PIN);
for (i = 0; i < buf_size; i++) {
data = 0;
for (j = 0; j < 8; j++) {
gpio_bit_set(HC165_CP_PORT, HC165_CP_PIN);
data |= gpio_input_bit_get(HC165_DATA_PORT, HC165_DATA_PIN) << j;
gpio_bit_reset(HC165_CP_PORT, HC165_CP_PIN);
}
buf[i] = data;
}
gpio_bit_set(HC165_PL_PORT, HC165_PL_PIN);
gpio_bit_set(HC165_OE_PORT, HC165_OE_PIN);
}
```
这段代码中,`bsp_74hc165_read` 函数实现了从级联的74HC165芯片中读取数据。首先将 `PL` 信号拉低,然后将 `CP` 和 `OE` 信号拉低,准备读取数据。接着,循环读取每个74HC165芯片的8位数据,将其存储到 `buf` 数组中。最后,将 `PL` 信号拉高,以便下一次读取。注意,此代码仅供参考,具体实现可能需要根据实际情况进行调整。
阅读全文