|
我是通过4+3位拨码开关让用户任意设置两个数据,程序将这两个数据读入再进行相应的处理。我将PC端口的0~3位为一组、4~6位为一组,GPIO配置的代码如下:
void port_C_Config(void)
{
// gpio_deinit(GPIOC); //重置PC端口
rcu_periph_clock_enable(RCU_GPIOC);
gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6);
}
我开始引脚为上拉方式,外部用拨码开关控制接地,但发现单片机相应引脚的电压仅为0.9~1.2V左右。后来只好改为下拉方式,外部用拨码开关控制接Vcc,确保能够正确设置。
读取引脚数据采取了从高位读起,逐位乘以2再加下位数值。
首先我用下面的代码直接逐位取数及计算,但得到的结果是零。
devi = gpio_input_bit_get(GPIOC,GPIO_PIN_6);
devi = (devi * 2) + gpio_input_bit_get(GPIOC,GPIO_PIN_5);
devi = (devi * 2) + gpio_input_bit_get(GPIOC,GPIO_PIN_4);
然后我改用if语句将读入引脚的状态判断后再计算,仍旧得不到的结果。
if (SET == gpio_input_bit_get(GPIOC,GPIO_PIN_3))
stan = 1;
else stan = 0;
if (SET == gpio_input_bit_get(GPIOC,GPIO_PIN_2))
stan = (stan * 2) + 1;
else stan = stan * 2;
if (SET == gpio_input_bit_get(GPIOC,GPIO_PIN_1))
stan = (stan * 2) + 1;
else stan = stan * 2;
if (SET == gpio_input_bit_get(GPIOC,GPIO_PIN_0))
stan = (stan * 2) + 1;
else stan = stan * 2;
|
|