0

我正在为一个简单的应用程序编写 STM8L051F3 处理器,其中只需要控制所有 GPIO。

问题是我无法控制 GPIOC 引脚 0。

我刚刚配置了 GPIO 寄存器。是否需要其他启动?

我还尝试在 Ubuntu 上使用 stm8cubemx。我发现没用的软件,因为它生成的 ioc8 文件没有关于如何在 Ubuntu 中使用它的信息。

#include <stdint.h>
#include <string.h>
#include "stm8l.h"

void config_gpio(){
           //76543210
  PA_DDR = 0b00000000;
  PA_CR1 = 0xff;
  PA_CR2 = 0x00;
           //76543210
  PB_DDR = 0b00100110;
  PB_CR1 = 0xff;
  PB_CR2 = 0x00;
           //76543210
  PC_DDR = 0b01110011;
  PC_CR1 = 0xff;
  PC_CR2 = 0x00;
           //76543210
  PD_DDR = 0b00000000;
  PD_CR1 = 0xff;
  PD_CR2 = 0x00;

  PA_ODR = 0x00;
  PB_ODR = 0x00;
  PC_ODR = 0x00;
  PD_ODR = 0x00;
  return;
}

void delay(unsigned long delay){
  unsigned long i = 0;  
  for(i = 0; i < delay; i++) {}
  return;
}

void rotate_left(int steps){
  int n=0; 
  for(n=0; n<steps; n++){
    //PC_DDR = 0b01110011;
               //76543210
    PC_ODR =   0b01100001;
    delay(100);
    PC_ODR =   0b00110001;
    delay(100);
    PC_ODR =   0b00010011;
    delay(100);
    PC_ODR =   0b01000011;
    delay(100);
  }
  return;
}

void rotate_right(int steps){
  int n=0; 
  for(n=0; n<steps; n++){
    //PC_DDR = 0b01110011;
               //76543210
    PC_ODR =   0b01000011;
    delay(100);
    PC_ODR =   0b00010011;
    delay(100);
    PC_ODR =   0b00110001;
    delay(100);
    PC_ODR =   0b01100001;
    delay(100);
  }
  return;
}

int main() {
  config_gpio();

  do {
    delay(7777);

    rotate_right(100);
    rotate_left(100);

  } while(1);
}

终端命令。

编译 sdcc -lstm8 -mstm8 --opt-code-size --std-sdcc99 --nogcse --all-callee-saves --debug --verbose --stack-auto --fverbose-asm --float-reent - -no-peep -I./ -I./STM8S_StdPeriph_Driver/inc -D STM8L051 ./main.c

Prog stm8flash -c stlinkv2 -p stm8l051f3 -s flash -w main.ihx

4

1 回答 1

0

PC0 和 PC1 仅在 stm8l051f3 中用作开漏。

于 2020-05-22T21:01:35.610 回答