【5】STM8——————8S GPIO操作

  1. 简述:
    1. 针对8S每个I/O端口可以包括多大8个引脚,每个引脚可以被独立编程做为数字输入、输出接口;扩展功能使用:模拟输入、外部中断、片上外设的输入/输出等复用功能;
    2. GPIO端口位操作方法:

      1. _Bool 自定义位名称 @ 寄存器:位数;

      2. 例如:_Bool GPIO_Led @PB_ODR:5;

  2. 端口寄存器:
    1. 输出数据寄存器 Px_ODR
    2. 输入引脚寄存器 Px_IDR
    3. 选择寄存器 Px_CR1
    4. 配置寄存器 Px_CR2
    5. 数据方向寄存器(决定是IO是输入还是输出) Px_DDR
  3. 主要功能:
    1. 输入模式:浮动输入、上拉输入
    2. 输出模式:推挽输出、开漏输出
    3. 外部中断可单独使能和关闭
    4. I/O复用
    5. 模拟输入时可以关闭输入施密特触发器来降低功耗
    6. 输入兼容5V电压(部分管脚支持,详见datasheet)
    7. I/O工作电压范围为1.6V---VDD i/o -Max
  4. 寄存器篇:
    1. Px_ODR 输出数据寄存器(7---0高位在前)
    2. Px_IDR 输入数据寄存器
    3. Px_DDR 数据方向寄存器
      1. 0:输入模式
      2. 1:输出模式
    4. Px_CR1 端口控制寄存器1
      1. 当DDR = 0时(输入模式);
        1. 0:浮空输入
        2. 带上拉电阻输入
      2. 当DDR = 1时(输出模式);
        1. 0:模拟开漏输出(非真正的开漏输出)
        2. 1:推挽输出,由CR2相应的位做输出速率控制;
    5. Px_CR2 端口控制寄存器2
      1. 当DDR = 0时
        1. 0:禁止外部中断
        2. 1:使能外部中断
      2. 当DDR = 1时
        1. 0:输出速度最大为2Mhz
        2. 1: 输出速度最大为10Mhz
  5. 初始化顺序
    1. 选择相应I/O管脚
    2. 设置为输入/输出/复用模式
    3. 上拉、推挽
    4. 访问端口数据
  6. 例程:
    1. _Bool GPIO_Led			@PA_ODR:1;	//led为输出,	1亮0灭;
      _Bool GPIO_Button		@PA_IDR:2;  //Button为输入
      /**************************************************
       * 函数名:
       * 描述  :
       * 输入  :无
       * 输出  :无
       * 返回  :无 
       * 调用  :内部调用 
       **************************************************/
      void GPIO_Init(void)
      {
      	//PA1设置为输出模式,接led灯的正极;
      	PA_DDR |= 0x01<<1;	//PA1输出,其它引脚不改变,1出0入;
      	PA_CR1 |= 0x01<<1;	//PA1推挽输出,其它引脚不变;
      	PA_CR2 |= 0x01<<1;	//PA1输出速度10Mhz;其它引脚不变;
      	GPIO_Led = 0;				//上电不亮,1亮0灭;
      	
      	//PA2设置为输入模式
      	PA_DDR &= 0xfe<<2;	//PA2输入,其它引脚不改变,1出0入;
      	PA_CR1 |= 0x01<<2;	//PA2上拉电阻输入,
      	PA_CR2 &= 0xfe<<2;	//PA2禁止外部中断;
      	GPIO_Button = 1;		//上电高电平,低电平有效
      }

       

  7. 总结:
    1. 每个I/O端口都有5个寄存器;默认/初始复位时,所有引脚设置为浮空输入,每个寄存器全部为0;
    2. 浮动输入与上拉输入是GPIO作为输入时的两种工作方式,
      1. 浮动输入时:GPIO管脚电平状态是不确定的,容易受到外部电平的干扰;
      2. 上拉输入时:管脚的电平则只有高电平或者低电平两种确定的状态,一般I/O做外部中断输入时要设置为上拉输入,做AD转换时要设置为浮动输入;
    3. 推挽输出与开漏输出则为GPIO输出的两种方式
      1. 单片机的GPIO输出高电平形成的电容我们称为拉电流;
      2. 输出低电平时形成的电流,我们称为灌电流,
      3. 一般将拉电流和灌电流作为评价一个单片机端口驱动能力的指标
      4. 对于驱动能力不足的单片机,我们可以增加推挽或开漏电路来增加端口的驱动能力;
    4. 推挽输出方式能够独立的输出高电平和低电平,适合驱动数字器件;开漏输出可以稳定的输出低电平,能承受大的灌电流,但是开漏输出无法输出高电平,需要外接上拉电阻才可以输出高电平,输出的高电平则有外接的上拉电平决定,这种输出方式适合做电流型驱动;
  8. 工具篇:
    1. 有两种开发工具:
      1. ST Visual Develop Version 4.3.2
      2. IAR
  9. 参考资料:
    1. 风驰开源STM8寄存器版本例程
    2. STM8中文参考手册
    3. STM8数据手册
    4. STM8S库函数中文参考.exe
  10. 程序
    1. 库函数
    2. 寄存器(本笔记依据寄存器编写)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值