我是嵌入式系统和C编程的新手。我目前正在尝试使用STM32微控制器对PCB进行编程,以便在收到单个命令后控制8个风扇的阵列。即00001011将打开风扇5,7和8.总共有256种可能的组合,对每个单独的组合进行编程效率不高。我正在考虑使用一个数组来实现这一点,如:fan_array[8] = {fan1, fan2, fan3, fan4, fan5, fan6, fan7, fan8};printf ("Input fan state"); // user would input binary number as shown abovescanf (%d, fan_array);
这是否会根据输入到阵列中的二进制值将GPIO引脚设置为控制每个风扇的高电平值还是低电平?
scanf (%d, fan_array);
它将整数读入数组的第一个元素。scanf%d读入指向整数的指针。fan_array是指向第一个元素fan_array [0]的指针。
你可以“ 轻松地 ” 使用查找表做你想做的事......如果你知道你的指针。
// List element with pointer to GPIO object and pin number.
typedef struct {
GPIO_PORT *port;
uint8_t pin
} fan_pin_t;
// List of fan ports and pint
const fan_pin_t fan_pin_list[] = {
{PORTA, 4},
{PORTC, 7},
...
{0,0}
};
// Function to set fans based on bitmask.
void set_fan(uint8_t command){
fan_pin_t *fp = fan_pin; // Load list pointer
uint8_t mask = 1; // Load mask 00000001
while(fp->port != 0){ // While not element {0,0}
if(command & mask){
fp->port->BSRR = (1<<fp->pin); // Write to Bit/Set/Reset/Register from current element
}else{
fp->port->BRR = (1<<fp->pin); // Write to Bit/Reset/Register from current element
}
mask <<= 1; // Left shift mask by 1
fp++; // Next element in list
}
}
一周热门 更多>