STM8S学习 - 操作单个IO口

更新时间:2024-03-15 00:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

STM8S学习——简单操作单个IO口

刚接触STM8系列单片机,学习了简单端口的操作,今天就来分享我的成果。因为是刚接触,各位见笑了。

STM8系列单片机每一个端口都有一个输出数据寄存器 (ODR),一个引脚输入寄存器 (IDR)和一个数据方向寄存器 (DDR)。寄存器1(CR1)和控制寄存器2(CR2)用于对输入/输出进行配置。任何一个I/O引脚可以通过对DDR,ODR,CR1和CR2寄存器的相应位进行编程来配置。下面是我截取的STM8教程里的部分配置表格:

I/O模式 DDR位 CR1位 CR2位 配置模式 0 0 0 悬浮输入 0 1 0 上拉输入 输入 0 0 1 中断悬浮输入 0 1 1 中断上拉输入 1 0 0 开漏输出 1 1 0 上拉输出 输出 1 X 1 输出(最快速度10MHz) X X X 真正的开漏输出(针对某些特点引脚) 大家根据上表对端口进行配置应该没有问题,但是对某一个端口进行配置时可能会遇上麻烦。那怎么对单个端口进行配置呢?我再附上一个表格,以便说明问题。 地址偏移值 0x00 寄存器 7 6 5 4 3 2 1 0 Px_ODR ODR7 ODR6 ODR5 ODR4 ODR3 ODR2 ODR1 ODR0 0 0 0 0 0 0 0 0 复位值 Px_1DR 复位值 IDR7 0 IDR6 0 IDR5 0 IDR4 0 IDR3 0 IDR2 0 IDR1 0 IDR0 0 0x01 0x02 Px_DDR DDP7 DDP6 DDP5 DDP4 DDP3 DDP2 DDP1 DDP0 0 0 0 0 0 0 0 0 复位值 Px_CR1 CR17 CR16 0 0 复位值 Px_CR2 CR27 CR26 0 0 复位值 CR15 CR14 CR13 CR12 0 0 0 0 CR25 CR24 CR23 CR22 0 0 0 0 CR11 0 CR10 0 0x03 0x04 CR21 CR20 0 0 假设同名端口(PA端口、PB端口等等)都有8个IO口7~0,因此对应上表我们发现正好一个IO口对应一列,比如7所在的列对应7号IO口,0所在的列对应0号IO口,于是单个IO口(假设是PB1)配置程序可写为:

PB_DDR = 0x02; // 配置PB端口的方向寄存器,PB1为输出模式

PB_CR1 = 0x02; // 设置PB1为推挽输出 PB_CR2 = 0x00;

下面附上PB1口控制LED闪烁的程序 #include \void GPIO_init(void) {

PB_DDR = 0x02; // 配置PB端口的方向寄存器,PB1为输出模式 PB_CR1 = 0x02; // 设置PB1为推挽输出 PB_CR2 = 0x00; }

void delay (void) {

unsigned char i,j,k; for(i=10;i>0;i--) for(j=202;j>0;j--) for(k=81;k>0;k--); }

main() {

GPIO_init();//端口初始化

CLK_DeInit();//恢复时钟寄存器

CLK_HSICmd(ENABLE);//启用内部高速振荡器(HSI 16MHz)

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//主时钟=16MHZ/1=16MHz CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);//CPU时钟=主时钟/1=18MHZ while (1) {

PB_ODR = 0x02;//PB1输出高电平,LED亮 delayms();

PB_ODR = 0x00; //PB1输出低电平,LED灭 delayms(); } }

本文来源:https://www.bwwdw.com/article/rd48.html

Top