Embedded 如何从74595获取信号
我将代码用作移位<代码>\寄存器\写入\字节(0xFF)代码> 我想使用移位寄存器写入字节函数根据8位数据变量生成LED输出。 但我没有收到信号。我怎样才能得到信号?谢谢大家!Embedded 如何从74595获取信号,embedded,stm32,Embedded,Stm32,我将代码用作移位\寄存器\写入\字节(0xFF) 我想使用移位寄存器写入字节函数根据8位数据变量生成LED输出。 但我没有收到信号。我怎样才能得到信号?谢谢大家! void shift_register_reset(void){ GPIOA->BSRR=GPIO_PIN_9; Delay_us(5); GPIOA->BRR=GPIO_PIN_9; Delay_us(5); GPIOA->BSRR=GPIO_PIN_9;} void shift_re
void shift_register_reset(void){
GPIOA->BSRR=GPIO_PIN_9;
Delay_us(5);
GPIOA->BRR=GPIO_PIN_9;
Delay_us(5);
GPIOA->BSRR=GPIO_PIN_9;}
void shift_register_clk_pulse(void){
GPIOA->BSRR=GPIO_PIN_8;
Delay_us(5);
GPIOA->BRR=GPIO_PIN_8;
}
void shift_register_load_pulse(void){
GPIOA->BSRR=GPIO_PIN_10;
Delay_us(5);
GPIOA->BRR=GPIO_PIN_10;
}
void shift_register_write_byte(uint8_t data){
shift_register_reset();
for(int i=0;i<8;i++){
if(((data>>i) &0x01) == 0 ){
GPIOA->BSRR = GPIO_PIN_15;
HAL_Delay(5);
shift_register_clk_pulse();
}
else if(((data>>i)& 0x01) == 1){
GPIOA->BSRR = GPIO_PIN_15;
HAL_Delay(5);
GPIOA->BRR = GPIO_PIN_15;
shift_register_clk_pulse();
}
}
HAL_Delay(5);
shift_register_clk_pulse();
HAL_Delay(5);
shift_register_load_pulse();}
void移位寄存器复位(void){
GPIOA->BSRR=GPIO_引脚_9;
延期付款(5);
GPIOA->BRR=GPIO_引脚_9;
延期付款(5);
GPIOA->BSRR=GPIO_引脚_9;}
无效移位寄存器时钟脉冲(无效){
GPIOA->BSRR=GPIO_引脚_8;
延期付款(5);
GPIOA->BRR=GPIO_引脚_8;
}
无效移位寄存器加载脉冲(无效){
GPIOA->BSRR=GPIO_引脚_10;
延期付款(5);
GPIOA->BRR=GPIO_引脚_10;
}
无效移位寄存器写入字节(uint8数据){
移位寄存器复位();
对于(int i=0;i>i)&0x01)==0){
GPIOA->BSRR=GPIO_引脚_15;
halu延迟(5);
移位寄存器时钟脉冲();
}
如果((数据>>i)&0x01)==1,则为else{
GPIOA->BSRR=GPIO_引脚_15;
halu延迟(5);
GPIOA->BRR=GPIO_引脚_15;
移位寄存器时钟脉冲();
}
}
halu延迟(5);
移位寄存器时钟脉冲();
halu延迟(5);
移位寄存器加载脉冲()
您所说的“我没有收到信号。我如何获得信号”是什么意思?您是否尝试过0xFF以外的值?0xC1(11000001b)是一个更好的测试值。它将验证LED上的位顺序以及LED是亮高还是亮低(无法从“图表”中确定)。当您只需要8个时钟脉冲时,您将生成9个时钟脉冲-您将丢失一点(使用0xFF也不会显示)。5毫秒延迟是不必要的-您在脉冲功能中有足够的延迟。如果一个位不是零,它只能是1,因此您不需要在中明确测试1,否则如果,为什么设置1,然后重置引脚?您是否正确初始化GPIO引脚作为输出,并在RCC中启用了相应的GPIO时钟?所有GPIO默认为输入,因此我们必须相信您已根据需要初始化I/O。您可以移动shift\u register\u clk\u pulse()代码>在if/else之后,因为这对两者都很常见。也可能是电路设计问题。图中的“LED”框没有告诉我们任何信息。您的LED指示灯是否正确?