历史上的今天
今天是:2024年09月07日(星期六)
2021年09月07日 | STM8S之GPIO自学笔记
2021-09-07 来源:eefocus
STM8S105C6T6 48个引脚 32KB Flash 封装:LQFP temp:-40~85
PA1~PA6,PB0~PB7,PC1~PC7,PD0~PD7,PE0~PE3,PE5~PE7,PG0,PG1,
一共38个通用I/O口。
GPIO寄存器
端口x输出数据寄存器(Px_ODR);
端口x输入数据寄存器(Px_IDR);
端口x输出数据方向(Px_DDR);0:输入模式 1:输出模式;
端口x控制寄存器1(Px_CR1);
当DDR=1;置0 模拟开漏输出;置1 推挽输出;(CR2位做输出摆率控制);
当DDR=0;置0 浮空输入;置1 上拉输入;
端口x控制寄存器2(Px_CR2);
当DDR=0;置0 禁止外部中断;置1 使能外部中断;
当DDR=1;置0 speed 2MHz;置1 speed 10MHz;
相应GPIO库函数
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
用于恢复指定端口的寄存器到默认值,0x00;无中断的功能浮空输入。
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode);
GPIO初始化,配置指定端口功能
GPIO_Pin:
GPIO_PIN_0 ~GPIO_PIN_7;
GPIO_PIN_HNIB;//高四位引脚
GPIO_PIN_LNIB;//低四位引脚
GPIO_PIN_ALL ;//所有引脚
GPIO_Mode:输入输出模式设置;
void GPIO_Write(GPIO_TypeDef* GPIOx, u8 PortVal);
写值到相应GPIO输出。
void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
置位指定端口的一个或多个引脚,并输出高电平,前提是该端口配置为输出模式。
void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
置位指定端口的一个或多个引脚,并输出低电平,前提是该端口配置为输出模式。
void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
取反指定端口的一个或多个引脚的电平状态,并输出,前提是该端口配置为输出模式。
u8 GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
读取指定端口数据,返回一个8位无符号值。前提该端口配置为输入模式。
u8 GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
读取指定端口输出寄存器的值,返回一个8位无符号值。
BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin);
读取指定端口一个或多个引脚的状态,任意一个引脚为高电平则返回SET,否则返回RESET。
void GPIO_ExternalPullUpConfig(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, FunctionalState NewState);
使能或禁止内部上拉电阻的引脚。
STM8S系列可以采用库函数或直接操作寄存器进行编程,
库函数版本的GPIO点亮LED(IAR FOR STM8S)
#include "stm8s.h"
#define uint unsigned int
void Delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=220;j>0;j--);
}
void main()
{
GPIO_Init( GPIOD,GPIO_PIN_0,GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_WriteHigh(GPIOD,GPIO_PIN_0);
Delay(500);
GPIO_WriteLow(GPIOD,GPIO_PIN_0);
Delay(500);
while(1);
}
void assert_failed(u8* file, u32 line)
{
while (1)
{
}
}
上一篇:STM8S独立看门狗配置及使用
下一篇:STM8S之HSI自学笔记
史海拾趣
|
BY 安防社区 水木金钟 有一学校,四年前安装了一套视频监控系统(PC式DVR),只有4路(只监控大门,二进二出),现在由我们公司升级到20路。 我们把所有的系统都做好后,发现有非常弱的干扰信号,不到200米的几个摄像机,在传输中 ...… 查看全部问答> |
|
我在CE下要向文件里写一些字符串。可是写入的时候出错,我以前用这代码在WIN32下好使的。请问怎么办 CStdioFile* pFile = new CStdioFile(FileName,CFile::modeWrite|CFile::modeCreate); CString code; code.Format(L\"P0%d X%f, Y% ...… 查看全部问答> |
|
尽管对于能够对高低输入电压之间的输出电压(例如:未经调节的墙上 12V 电源)进行调节的转换器需求一直都存在,而且 DC/DC 单端初级电感转换器(SEPIC) 拓扑也不是什么新东西,但的确直到最近它才开始流行起来。 ...… 查看全部问答> |




