STM32-(13):GPIO的库函数使用

上一篇:STM32-(12):STM32硬件开发环境下一篇:STM32-(14):端口复用与重映射

库函数实现串行通信

1、库函数的说明
2、硬件电路与重映射
3、程序调试技巧

固件函数库

在这里插入图片描述
在这里插入图片描述
用库函数的方法实现LED亮灭

核心板关于164通信引脚
在这里插入图片描述

由上图可知164串行通信的三个引脚:
CLK:PB15
CLR:PE11
Data:PE10

底板关于164通信引脚
在这里插入图片描述

CLR是异步清零端,与同步通信没有关系,但这个引脚必须为高电平,同步通信才有效,Q1~Q8是输出引脚,连接的是八个发光二极管,当输出为高电平,二极管就会被点亮。

/*Include---------------------------*/
#include"stm32f10x_lib.h"		//包含所有的头文件
#include<stdio.h>

//----------------函数声明--------------------
void Delay_MS(u16 dly);
void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART3_Configuration(void);


/*******************************************************************************
* Function Name  : main
* Description    : Main program.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/ 
int main(void)
{	
	u8 i,data;
	#ifdef DEBUG
	debug();
	#endif

	//------------初始化------------
	RCC_Configuration();
	GPIO_Configuration();

 	//------------164的通信------------
	//CLK:PB5上升沿  CLR:PE11==1  Data:PE10输出对应的数据
	//GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);
	data = 0xF0;   //1111 0000
	GPIO_ResetBits(GPIOE, GPIO_Pin_11); //将GPIOE的第11个口清零
	GPIO_SetBits(GPIOE, GPIO_Pin_11);  //将GPIOE的第11个口置1
	for(i=0;i<8;i++)
	{
		GPIO_ResetBits(GPIOB, GPIO_Pin_5);   //pb5=0
	    
		if((data&0x80)==0x00)
			GPIO_ResetBits(GPIOE, GPIO_Pin_10); 
		else
			GPIO_SetBits(GPIOE, GPIO_Pin_10); 	  
			//GPIOE是一位一位存进去的,然后从低位往高位移动,当i从0-7,GPIOE的pin10的寄存器状态
			//分别是(10000000、11000000、11100000、11110000、01111000、00111100、00011110、00001111),每一个位置为1时,对应的二极管就会发光

		GPIO_SetBits(GPIOB, GPIO_Pin_5);  //pb5=1
		data<<=1;
	}

	while(1)  //测试核心板原理图上 LED D3状态指示灯
	{
		Delay_MS(20000);
		GPIO_ResetBits(GPIOC, GPIO_Pin_0);
		Delay_MS(20000);
		GPIO_SetBits(GPIOC, GPIO_Pin_0);
	}
		
}

/*******************************************************************************
* Function Name  : Delay_Ms
* Description    : delay 1 ms.
* Input          : dly (ms)
* Output         : None
* Return         : None
*******************************************************************************/
void Delay_MS(u16 dly)
{
	u16 i,j;
	for(i=0;i<dly;i++)
		for(j=1000;j>0;j--);
}

/*******************************************************************************
* Function Name  : RCC_Configuration
* Description    : Configures the different system clocks.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RCC_Configuration(void)
{
	//----------使用外部RC晶振-----------
	RCC_DeInit();			//初始化为缺省值
	RCC_HSEConfig(RCC_HSE_ON);	//使能外部的高速时钟 
	while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);	//等待外部高速时钟使能就绪
	
	FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);	//Enable Prefetch Buffer
	FLASH_SetLatency(FLASH_Latency_2);		//Flash 2 wait state
	
	RCC_HCLKConfig(RCC_SYSCLK_Div1);		//HCLK = SYSCLK
	RCC_PCLK2Config(RCC_HCLK_Div1);			//PCLK2 =  HCLK
	RCC_PCLK1Config(RCC_HCLK_Div2);			//PCLK1 = HCLK/2
	RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);	//PLLCLK = 8MHZ * 9 =72MHZ
	RCC_PLLCmd(ENABLE);			//Enable PLLCLK

	while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);	//Wait till PLLCLK is ready
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);	//Select PLL as system clock
	while(RCC_GetSYSCLKSource()!=0x08);		//Wait till PLL is used as system clock source
	
	//---------打开相应外设时钟--------------------
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE);	//使能APB2外设的GPIOA的时钟		 
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
	//开启时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOC,ENABLE);
}

/*******************************************************************************
* Function Name  : GPIO_Configuration
* Description    : 初始化GPIO外设
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void GPIO_Configuration(void)
{
	//CLK:PB5  CLR:PE11  Data:PE10
	GPIO_InitTypeDef	GPIO_InitStructure;		//声明一个结构体变量

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; 	//选择PC.10(TXD) 和 PC.11
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //管脚频率为50MHZ
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	 //输出模式为推挽输出
	GPIO_Init(GPIOB,&GPIO_InitStructure);				 //初始化PB5
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11; 	//选择PC.10(TXD) 和 PC.11
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //管脚频率为50MHZ
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	 //输出模式为推挽输出
	GPIO_Init(GPIOE,&GPIO_InitStructure);				 //初始化PB5

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; 	//选择PC.10(TXD) 和 PC.11
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //管脚频率为50MHZ
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	 //输出模式为推挽输出
	GPIO_Init(GPIOC,&GPIO_InitStructure);				 //初始化PB5

	
} 

void USART3_Configuration(void)
{
	USART_InitTypeDef  U3;
	U3.USART_BaudRate =9600;
	U3.USART_WordLength = USART_WordLength_8b;
	U3.USART_StopBits = USART_StopBits_1;
	U3.USART_Parity = USART_Parity_No;
	U3.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
	U3.USART_HardwareFlowControl = USART_HardwareFlowControl_None; 

	USART_Init(USART3, &U3);

	USART_Cmd(USART3,ENABLE);
}
上一篇:STM32-(12):STM32硬件开发环境下一篇:STM32-(14):端口复用与重映射
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值