void GPIO_INIT(void)//IO初始化函数
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;
GPIO_Init(GPIOC, GPIO_InitStructure);
}
初始化函数就这点内容,其中GPIO_Mode_IN_FLOATING 可以换成GPIO_Mode_IPU 或GPIO_Mode_IPD,三种方式都是数字输入,也有当使用ADC功能时模拟输入方式GPIO_Mode_AIN;以上输入方式区别在于在端口悬空时,读取IO状态分别为“不确定,高电平,低电平”
读取函数使用GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13),函数返回值就是IO口电平状态。
有的是自动使用复用功能的,比如普通的51单片机,串口就跟IO复用,但是你用串口收发数据的时候,就自动转变为串口的功能了。
当然有的需要设置,比如C8051F需要配置交叉开关把串口部件的信号连接到端口上才行。
确定是置1点亮LED,不是清0点亮?可以试试置1清0都有延时的程序(如下),应该会亮灭交替(原来的程序中少了延时)。如果不行,就置1后用万用表测量对应端口,看对不对。还要检查电路是否外部接电源或地的。
while (1)
{
GPIO_SetBits(GPIOB, GPIO_Pin_4 ); // 亮
Delay(0x8FFFEF);
GPIO_ResetBits(GPIOB, GPIO_Pin_4 ); // 灭
Delay(0x8FFFEF);
}
建议仔细看看手册。
手册上说:
PC13,PC14和PC15引脚通过电源开关进行供电,而这个电源开关只能够吸收有限的电流(3mA)。因此这三个引脚作为输出引脚时有以下限制:在同一时间只有一个引脚能作为输出,作为输出脚时只能工作在2MHz模式下,最大驱动负载为30pF,并且不能作为电流源(如驱动LED)。
STM32支持JTAG和SWD两种调试方式,且默认状态下这两种调试功能都是 开启 的。
由此我们可以知道:
如果要使用JTAG调试功能,那么PB3,PB4,PA13,PA14,PA15都不能使用;
而如果我们关闭JTAG功能,但是开启SWD调试功能,那么PB3,PB4,PA15都可以当作普通IO来使用了;
ST官方3.5的库有提供关闭调试功能的两个接口:
执行上面语句后,PB3,PB4,PA13,PA14,PA15都可以当作普通iO来使用,此时不能通过J-Link进行调试了;
执行上面语句后,PB3,PB4,PA15都可以当作普通iO来使用,且可以通过SWD进行调试。
建议程序启动时延时3-5秒后再关闭JTAG调试模式,如此,单片机断电复位后立即点击烧写按钮也是可以进行程序烧录的。
设置启动模式为ISP模式(BOOT0=1、BOOT1=0)或设置启动模式为RAM运行模式(BOOT0=1、BOOT1=1)。
将开发板断电后重新上电,此时就因不是在用户程序模式,因此就不会执行禁用JTAG的语句,JTAG功能也就可以正常使用。
设置启动模式为ISP模式(BOOT0=1、BOOT1=0),用ISP程序将STM32的FLASH擦除,之后就可恢复JTAG功能。
如果你的仿真器支持SWD仿真模式,如IAR下用JLINK、MDK下用ULINK2。直接将仿真器的模式设为SWD模,就可以不受这个禁止JTAG功能的影响了。
IO口的输入输出是通过对单片机寄存器的配置来实现的。C51的单片机IO口本来就是双向的不需要设置。STM32单片机的IO口用C语言的设置方法如下:voidLED_Config(void){GPIO_InitTypeDefGPIO_Structure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//PC10-LED(指示灯)GPIO_Structure.GPIO_Pin=GPIO_Pin_10;GPIO_Structure.GPIO_Speed=GPIO_Speed_2MHz;GPIO_Structure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOC,GPIO_Structure);//LED}
本文标签:将stm32pc13设为io口