GPIO端口、基本定时器、串口

一、GPIO端口

1.1 开启所需IO口时钟

1.2 配置GPIO工作模式

       GPIO端口模式寄存器 (GPIOx_MODER):

                        00:输入

                        01:通用输出模式

                        10:复用功能模式

                        11:模拟模式

        GPIO端口输出类型寄存器 (GPIOx_OTYPER):

                        0:推挽输出

                        1:输出开漏

        GPIO端口输出速度寄存器 (GPIOx_OSPEEDR):

                       00:2 MHz(低速)

                       01:25 MHz(中速)

                       10:50 MHz(快速)

                       11:30 pF 时为 100 MHz(高速)

        GPIO 端口输出数据寄存器 (GPIOx_ODR): 写1置1,写0清零

     GPIO 端口置位/复位寄存器 (GPIOx_BSRR): 分为GPIOx_BSRRH和GPIOx_BSRRL,GPIOx_BSRRH写1给对应端口位清零,GPIOx_BSRRL写1给对应端口置1。

        GPIO 复用功能低位寄存器 (GPIOx_AFRL):端口 x 位 y 的复用功能选择,(y:0——7)

        GPIO 复用功能低位寄存器 (GPIOx_AFRL):端口 x 位 y 的复用功能选择,(y:8——15)

1.3 初始状态设置

void LED_Init(void)
{
	RCC->AHB1ENR |= 1<<5;	//开启F口时钟 
    /***********PF6************/
	GPIOF->MODER &= ~(3<<2*6);	//清零
	GPIOF->MODER |= 1<<2*6;	//通用输出
	GPIOF->OTYPER &= ~(1<<6);	//推挽输出
	GPIOF->OSPEEDR &= ~(3<<2*6);	//清零
	GPIOF->OSPEEDR |= 2<<2*6;	//输出速度50MHz
	
	GPIOF->ODR |= 1<<6;		//初始状态为高电平
}

二、基本定时器

      1.控制寄存器 1 (TIMx_CR1)

      2.控制寄存器 2 (TIMx_CR2)

      3.DMA/中断使能寄存器 (TIMx_DIER)

      4.状态寄存器 (TIMx_SR):标志位(每次更新事件后要置零)

      5.事件生成寄存器 (TIMx_EGR):手动更新

      6.计数器 (TIMx_CNT):存储计数值

      7.预分频器 (TIMx_PSC)

      8.自动重载寄存器 (TIMx_ARR):存放自动重装载值(当计数器达到此值时,计数器发生跟新时间,并重新开始计数)

/***********************
函数功能:TIM7基本定时器初始化
***********************/
void TIM_Init_7(void)
{
	RCC->APB1ENR |= 1<<5;	//开启TIM7时钟
	
	TIM7->CR1 |= 1<<7;	//开启自动重装载寄存器的影子寄存器
	TIM7->CR1 &= ~(1<<3);	//循环计数
	TIM7->CR1 &= ~(1<<2);	//更新请求源
	TIM7->CR1 &= ~(1<<1);	//使能更新

	TIM7->CR1 &= ~(1<<0);	//关闭计数器
}	

/************TIM7us延时函数**************/
void TIM7_us(u16 us)
{
	TIM7->CNT = 0;	//计数器清零
	TIM7->PSC = 84-1;	//预分频系数
	TIM7->ARR = us;	//重装载值 ---- 最大计数周期
	
	TIM7->EGR |= 1<<0;	//手动更新 UG位置1
	TIM7->SR &= ~(1<<0);	//清除标志位
	
	TIM7->CR1 |= (1<<0);	//开启计数器
	while(!(TIM7->SR & 1<<0));
	TIM7->SR &= ~(1<<0);	//清除标志位
	
	TIM7->CR1 &= ~(1<<0);	//关闭计数器
}

三、串口 USART

3.1 串口发送数据

      1)、在MCU内定义需要发送的数据

      2)、MCU将需要发送的数据通过数据总线写入到“发送数据寄存器”

                        /*********************以下步骤由硬件自动完成**********************/

      3)、当“发送数据寄存器”被写入后,将数据并行发送到“发送移位寄存器”,并且由硬件自动产生一个“发送数据寄存器”为空的标志。

      4)、“发送移位寄存器”伴随着已经设置好的波特率时钟脉冲,把数据按照顺序一位一位的发送到数据发送管脚(TX),当“发送移位寄存器”为空并且“发送数据寄存器”也为空的时候,由硬件自动产生一个“传输完成”的标志。

      5)、数据在串口发送管脚发送数据,数据通过USB转串口芯片(电平转换芯片)后,由USB数据线传输到电脑上位机上。

3.2 串口接收数据

      1)、电脑上位机通过USB线发送数据,数据通过USB转串口芯片发送到串口接收数据管脚(RX)

      2)、接收管脚根据已经设置好的波特率时钟脉冲,一位一位的把数据传输到“接收移位寄存器”中

      3)、当“接收移位寄存器”接收完数据之后,并行把数据传输到“接收数据寄存器”中,并且会由硬件自动产生一个“接收数据寄存器”为满的标志。

                        /*******************以上步骤由硬件自动完成********************/

      4)、CPU通过数据总线读出“接收数据寄存器”的内容。

常用寄存器:

      状态寄存器 (USART_SR)

      数据寄存器 (USART_DR)

      波特率寄存器 (USART_BRR)

      控制寄存器 1 (USART_CR1)

      控制寄存器 2 (USART_CR2)

      控制寄存器 3 (USART_CR3)

/******************************************
函数功能:串口初始化函数
函数参数:bount:波特率
函数返回值:无
硬件接口:
PA9---USART1_TX-----输出
PA10--USART1_RX-----输入
******************************************/
void Usart1_Tnit(u32 bount)
{
	float USARTDIV;
	u32 USART_ZHENG,USART_XIAO;
	//GPIO初始化
	RCC->AHB1ENR |= 1<<0;  //开启A口时钟
	
	GPIOA->MODER &= ~(3<<2*9);  //PA9清零
	GPIOA->MODER |= 2<<2*9;		//设置PA9为复用模式
	GPIOA->MODER &= ~(3<<2*10);  //PA10清零
	GPIOA->MODER |= 2<<2*10;	//设置PA10为复用模式
	
	GPIOA->AFR[1] |= 7<<4*(9-8);  //PA9的复用功能为USART1
	GPIOA->AFR[1] |= 7<<4*(10-8);  //PA10的复用功能为USART1
	
	//USART1初始化
	RCC->APB2ENR |= 1<<4;	//开启USART1时钟
	
	USART1->CR1 &= ~(1<<15);	//16倍过采样模式
	USART1->CR1 &= ~(1<<12);	//数据位长度为8位
	
	USART1->CR2 &= ~(3<<12);	//1个停止位
	
	//波特率
	USARTDIV = 84000000.0/(8*(2-0)*bount);
	USART_ZHENG = USARTDIV;
	USART_XIAO = (USARTDIV - USART_ZHENG)*16;
	USART1->BRR = USART_ZHENG<<4 | USART_XIAO;
	
	USART1->CR1 |= 1<<3;	//发送器使能
	USART1->CR1 |= 1<<2;	//接收器使能
	USART1->CR1 |= 1<<13;	//使能USART1
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值