可容忍5V:即输入为5V时,单片机将输入仍视为高电平
通过总线对寄存器进行数据操作,然后输出数据通过驱动器增强驱动能力,最后输出到PA0-PA15这16个引脚。
保护二极管:I/O引脚电压大于Vdd时,二极管导通,电流流向Vdd而不是流入单片机内部。I/O引脚电压小于-Vss时,二极管导通,电流由Vss流出到引脚,而不会从单片机内部汲取电流。只有当引脚电压处于Vss~Vdd时,两个二极管都不导通,电流才会流入单片机。
上拉下拉电阻:给程序提供默认输入电平。通过程序配置两个开关的的闭合,可配置成上拉输入模式,下拉输入模式,浮空输入模式。上拉:输入默认高电平。下拉:输入默认低电平。浮空:输入电平不稳定(慎重)。
TTL施密特触发器:对输入进行波形整形,将模拟量转为数字量。也可以不通过触发器直接作为模拟量输入。
输出控制:片上外设通过输出寄存器控制输出数据完成对输出模式的配置,可配置为推挽(高低电平),开漏,和关闭模式。
LED闪烁
#include "stm32f10x.h" // Device header
#include"Delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//设置GPIOA外设的时钟
GPIO_InitTypeDef GPIO_InitStructure;//定义初始化结构体参数
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置引脚输出模式为推挽输出
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//打开0号引脚输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置引脚翻转速度
GPIO_Init(GPIOA,&GPIO_InitStructure);//读取结构体参数,将数据写入内部寄存器
while(1)
{
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET );
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET );
Delay_ms(500);
}
}
LED流水灯
#include "stm32f10x.h" // Device header
#include"Delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//设置GPIOA外设的时钟
GPIO_InitTypeDef GPIO_InitStructure;//设置结构体变量
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//一般输出用推挽输出即可
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;//输出设置为所有引脚
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);//读取结构体参数,进行初始化
while(1)
{
for(i=0;i<8;i++)
{
GPIO_Write(GPIOA ,~0x0001);
Delay_ms (100);
GPIO_Write(GPIOA ,~0x0002);
Delay_ms (100);
GPIO_Write(GPIOA ,~0x0004);
Delay_ms (100);
GPIO_Write(GPIOA ,~0x0008);
Delay_ms (100);
GPIO_Write(GPIOA ,~0x0010);
Delay_ms (100);
GPIO_Write(GPIOA ,~0x0020);
Delay_ms (100);
GPIO_Write(GPIOA ,~0x0040);
Delay_ms (100);
GPIO_Write(GPIOA ,~0x0080);
Delay_ms (100);
}
}
}
蜂鸣器
#include "stm32f10x.h" // Device header
#include"Delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//设置GPIOA外设的时钟
GPIO_InitTypeDef GPIO_InitStructure;//设置结构体变量
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//一般输出用推挽输出即可
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2 ;//输出设置为所有引脚
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);//读取结构体参数,进行初始化
while(1)
{
GPIO_SetBits(GPIOA ,GPIO_Pin_2);//高电平
Delay_ms(500);//延时
GPIO_ResetBits(GPIOA ,GPIO_Pin_2);//低电平发出声音
Delay_ms(500);//延时
}
}