【问题标题】:STM8L051F3 GPIO Initial ConfigSTM8L051F3 GPIO 初始配置
【发布时间】:2020-09-08 17:14:55
【问题描述】:

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

问题是我无法控制GPIOC pin 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

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

【问题讨论】:

  • rotate_right()rotate_left() 函数永远不会改变 PC0。您期望什么以及您观察到什么告诉您它不起作用?
  • 你好@kkrambo。我正在测量引脚的电压。 PC4 我​​可以测量脉冲。第一位不是msb吗?为什么 PC0 从不改变?
  • @kkrambo。对不起,我解释得很糟糕。问题是 PC0 的电气值始终为 0V。
  • 问题是PC0和PC1只能作为开漏输出。
  • ioc8文件是STM8CubeMX工程文件,不是目标代码。根据user manual的说法,与STM32CubeMX不同,STM8CubeMX不支持代码生成。

标签: c embedded sdcc stm8


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2021-07-19
    • 2022-11-11
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多