关键词不能为空

当前您在: 主页 > 英语 >

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
1970-01-01 08:00
tags:

-

2021年1月23日发(作者:phenomena)

STM32
学习笔记




GPIO


GPIO
初始化

void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//
声明结构体

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//
打开功能时钟
(
再写这句程序的时候,
必须进行时钟系统初始化的操作
)


GPIO__Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;//
指明操作对象
引脚

GPIO__Speed = GPIO_Speed_50MHz;//
设置
I O
口时钟为
50MHz/10MHz/2MHz
GPIO__Mode = GPIO_Mode_Out_PP;//
设置推挽输出

/*GPIO_Mode_AIN
模拟输入


GPIO_Mode_IN_FLOATING
浮空输入

(一般为中断所使用)。

GPIO_Mode_IPD
下拉输入

GPIO_Mode_IPU
上拉输入

GPIO_Mode_Out_OD
开漏输出

GPIO_Mode_Out_PP
推挽输出

GPIO_Mode_AF_OD
复用开漏输出

GPIO_Mode_AF_PP
复用推挽输出
*/

一般用在点灯
)。

GPIO_Init(GPIOA, &GPIO_InitStructure); //
执行初始化
IO


}
GPIO
常用函数

GPIO_SetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);//
置高
IO



GPIO_ResetBits(GPIOA,GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);//
置低
IO


GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_4)));//
翻转
IO


GPIOA->ODR = 0X0010 //IO
口直接赋值语句

G PIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)(
读取该口的电压 值,相当于
AVR

pin
)
。若
平,则这个函数返回为< br>1
,为低电平时返回为
0.


IO
口为高电

SysTick
系统时钟

SysTick
配置函数


if (SysTick_Config(SystemCoreClock / 3000))//
配置时钟的频率
,
改变数字可改变频率,数字越大频率越快

{
/* Capture error */
while (1);
}



EXTI
中断

外部中断

外部中断
IO
口设置

void GPIO_EXTI_Configuration(void)
{
RCC_APB2 PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph _GPIOD, ENABLE);//
使能时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//
使能复用
IO
时钟

GPIO_InitTypeDef GPIO_InitStructure;//
声明
IO
口初始化结构体

GPIO__Pin = GPIO_Pin_6;//
指定
PD.06
为操作对象

GPIO__Mode = GPIO_Mode_IN_FLOATING;//
设置模式为浮空输入

GPIO_Init(GPIOC, &GPIO_InitStructure);//
初始化
IO



GPIO__Pin = GPIO_Pin_13|GPIO_Pin_14; //
指定
PD.13,14
为操作对象

GPIO__Mode = GPIO_Mode_IN_FLOATING; //
设置模式为浮空输入

GPIO_Init(GPIOD, &GPIO_InitStructure);//
初始化
IO


GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6); //

PC.06
映射到外部中断

GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource13); //

PD.13
映射到外部中断

GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource14); //

PD.14
映射到外部中断

}
外部中断初始化

void EXTI_Configuration(void)
{


EXTI_InitTypeDef EXTI_InitStructure;//
声明外部中断初始化结构体

EXTI__Line = EXTI_Line6|EXTI_Line13|EXTI_Line14;//
使能外部中断线路
6,13,14

EXTI__Mode = EX TI_Mode_Interrupt;//
设置
EXTI
线路模式为中断

EXTI__Trigger = EXTI_Trigger_Rising;//
设置触发方式为上升沿

EXTI__LineCmd = ENABLE;//
使能中断线路

EXTI_Init(&EXTI_InitStructure);//
初始化结构体

}
外部中断向量
&
优先级设定

void NVIC_EXTI_Configuration(void)
{

NVIC_InitTypeDef NVIC_InitStructure;//
声明中断向量
&
优先级设定结构体

NVIC_PriorityGroupConf ig(NVIC_PriorityGroup_2);//
选择中断向量组别为
2


NVIC__IRQChannel = EXTI9_5_IRQn;//
指定外部中断向量

NVIC__IRQChannelPreemptionPriority = 0;//
设置该中断的先占优先级


NVIC__IRQChannelSubPriority = 0;//
设置该中断的从优先级

NVIC__IRQChannelCmd = ENABLE;//
使能该外部中断

NVIC_Init(&NVIC_InitStructure);//
初始化外部中断

NVIC__IRQChannel = EXTI15_10_IRQn;//
指定外部中断向量

NVIC__IRQChannelPreemptionPriority = 0;//
设置该中断的先占优先级

NVIC__IRQChannelSubPriority = 0; //
设置该中断的从优先级

NVIC__IRQChannelCmd = ENABLE;//
使能该外部中断

NVIC_Init(&NVIC_InitStructure); //
初始化外部中断

}
由抢先优先级和从优先级实现了中断嵌套,进而使程序即使处理更加要紧的事情。且高的抢 先优先级可以
打断低的抢先优先级,当抢先优先级相同时,那就比较从优先级,先响应高的。当二者都相 同时,先响应
物理地址低的中断。


外部中断函数

/*example1*/
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line6) != RESET)
//
如果对应的中断线路触发事件,注意可以一个中断向量对应多个中断引脚

{
/*add code */
EXTI_ClearITPendingBit(EXTI_Line6);//
清中断标志

}
}
/*example2*/
void EXTI15_10_IRQHandler(void)

{
if(EXTI_GetITStatus(EXTI_Line13) != RESET)
//< br>如果对应的中断线路
13
触发事件,注意可以一个中断向量对应多个中断引脚

{
/* add code */
EXTI_ClearI TPendingBit(EXTI_Line13);//
清中断标志位

}
if(EXTI_GetITStatus(EXTI_Line14) != RESET) //
如果对应的中断线路
14
触发事件,注意可以一个中断向量对应多个中断引脚

{
/* add code */
EXTI_ClearITPendingBit(EXTI_Line14); //
清中断标志位

}
}

中断
channel


WWDG_IRQChannel



窗口看门狗中断
0x00
PVD_IRQChannel


TAMPER_IRQChannel


RTC_IRQChannel


FlashItf_IRQChannel


RCC_IRQChannel


EXTI0_IRQChannel


EXTI1_IRQChannel


EXTI2_IRQChannel


EXTI3_IRQChannel



PVD
通过
EXTI
探测中断

篡改中断


RTC
全局中断

FLASH
全局中断

全局中断

外部中断线
0
中断

外部中断线
1
中断

外部中断线
2
中断

外部中断线
3
中断





RCC





EXTI4_IRQChannel



外部中断线
4
中断

DMAChannel1_IRQChannel
DMA
通道
1
中断

DMAChannel2_IRQChannel
DMAChannel3_IRQChannel
DMAChannel4_IRQChannel
DMAChannel5_IRQChannel
DMAChannel6_IRQChannel
DMAChannel7_IRQChannel
ADC_IRQChannel ADC


USB_HP_CANTX_IRQChannel
USB_LP_CAN_RX0_IRQChannel
DMA
通道
2
中断

DMA
通道
3
中断

DMA
通道
4
中断

DMA
通道
5
中断

DMA
通道
6
中断

DMA
通道
7
中断

全局中断

USB
高优先级或者
CAN
发送中断

USB
低优先级或者
CAN
接收
0
中断

CAN_RX1_IRQChannel


CAN_SCE_IRQChannel


EXTI9_5_IRQChannel


TIM1_BRK_IRQChannel

TIM1_UP_IRQChannel


TIM1_TRG_COM_IRQChannel
TIM1_CC_IRQChannel


TIM2_IRQChannel


TIM3_IRQChannel


TIM4_IRQChannel


I2C1_EV_IRQChannel



CAN
接收
1
中断

CAN SCE
中断


外部中断线
9-5
中断


TIM1
暂停中断

TIM1
刷新中断

TIM1
触发和通讯中断

TIM1
捕获比较中断



TIM2
全局中断


TIM3
全局中断



TIM4
全局中断

I2C1
事件中断

5

9
对应一个中断源)。


I2C1_ER_IRQChannel


I2C2_EV_IRQChannel


I2C2_ER_IRQChannel

SPI1_IRQChannel


SPI2_IRQChannel


USART1_IRQChannel


USART2_IRQChannel


USART3_IRQChannel


EXTI15_10_IRQChannel

RTCAlarm_IRQChannel

USBWakeUp_IRQChannel


I2C1
错误中断

I2C2
事件中断


I2C2
错误中断



SPI1
全局中断



SPI2
全局中断


USART1
全局中断


USART2
全局中断


USART3
全局中断


外部中断线
15-10
中断


RTC
闹钟通过
EXTI
线中断

USB
通过
EXTI
线从悬挂唤醒中断


EXIT
中断分为三种:一种为0

4
,一种为
5

9
,一种为
10

15.
中断优先级表

NVIC_PriorityGroup
NVIC_PriorityGroup_0
NVIC_PriorityGroup_1
NVIC_PriorityGroup_2
NVIC_PriorityGroup_3
NVIC_PriorityGroup_4



NVIC_IRQChanne
的先占优先级

0
0-1
0-3
0-7
0-15
NVIC_IRQChann
的从优先级

0-15
0-7
0-3
0-1
0
描述

先占优先级
0


从优先级
4


先占优先级
1


从优先级
3


先占优先级
2


从优先级
2


先占优先级
3


从优先级
1


先占优先级
4


从优先级
0



TIM
定时器

TIM1
TIM1 PWM
波模式

TIM1
基本配置初始化

void TIM1_BASE_Configuration(void)
{
TIM_DeInit(TIM1);//
将定时器
1
寄存器设置为缺省值

/*TIM1
基本设置
*/
TIM_TimeBaseInitTypeDef TIM1_TimeBaseStructure;//
声明初始化结构体

TIM1__Prescaler = 0x0; //
设置周期


TIM1__Period = 0xFFFF; //
设置分频,范围
0-0XFFFF
TIM1__ClockDivision = 0x0; //
设置时钟分割

TIM1__CounterMode = TIM_CounterMode_Up;//
计数模式,向上计数

TIM1__RepetitionCounter = 0x0;//
计数器重载值

TIM_TimeBaseInit(TIM1,&TIM1_TimeBaseStructur e);//
初始化结构体

}
TIM2
TIM2
普通模式

TIM2
基本配置初始化

void TIM2_BASE_Configuration(void)
{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//
声明初始化结构体

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//
使能定时器
2
,注意时钟源是
APB1
TIM__Period = 7200; //
设置周期时间,范围
0-0XFFFF
TIM__Prescaler = 9999;//
设置分频,范围
0-0XFFFF
TIM__ClockDivision = 0;//
时钟分割

TIM__CounterMode = TIM_CounterMode_Up;//
向上计数

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//
初始化定时器基本配置

TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//
清除刷新中断标志位

TIM_ITConfig(TIM2, TIM_IT_Update , ENABLE);//
开启计数中断

TIM_Cmd(TIM2, ENABLE);//
使能
TIM2
}

TIM2
中断初始化

void NVIC_TIM2_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;//
声明结构体

NVIC_Prior ityGroupConfig(NVIC_PriorityGroup_0);//
设置优先级组< br>0,1,2,3,4
NVIC__IRQChannel = TIM2_IRQn;//
中断向量:定时器
2
全局中断

NVIC__IRQChannelPreemptionPriority = 0;//
设置先占优先级

NVIC__IRQChannelSubPriority = 1;//
设置从优先级

NVIC__IRQChannelCmd = ENABLE;//
中断使能

NVIC_Init(&NVIC_InitStructure);//
初始化中断

}

TIM2
中断函数

void TIM2_IRQHandler(void)//
定时器
2
中断

{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)//
等待刷新完成

{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//
清刷新数据中断标志位

/*add code */
}
}

TIM3
TIM3 PWM
波模式

TIM3 PWM
基本初始化设置

void TIM3_BASE_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //
声明基本初始化结构体

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //T3
时钟使能

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //T3
时钟使能

TIM__Period = 7200; //
周期
72M/7200=10KHz.
TIM__Prescaler = 0; //
分频

TIM__ClockDivision = 0; //
时钟分割


TIM__CounterMode = TIM_CounterMode_Up; //
计数模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //
执行初始化
TIM3
TIM_Cmd(TIM3, ENABLE); //
使能计数

}
TIM3 PWM
通道初始化

void TIM3_CHANNEL_Configuration(void)
{
TIM_OCInitTypeDef TIM_OCInitStructure; //
声明初始化结构体

/***************************
通道
1 ********************************/
TIM__OCMode = TIM_OCMode_PWM2; //
模式选择:
PWM2
TIM__OutputState = TIM_OutputState_Enable; //PWM
波输出使能

TIM__Pulse = CCR1_Val; //
写比较值占空比


TIM__OCPolarity = TIM_OCPolarity_Low; //
比较时清零

TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //
使能预装载寄存器

/******************************
通道
2 ******************************/
/* PWM1 Mode configuration: Channel2 */
TIM__OutputState = TIM_OutputState_Enable; //PWM
波输出使能

TIM__Pulse = CCR2_Val; //
写比较值占空比

TIM__OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //
使能预装载寄存器

/*******************************
通道
3 *********************************/
/* PWM1 Mode configuration: Channel3 */

TIM__OutputState = TIM_OutputState_Enable; //PWM
波输出使能

TIM__Pulse = CCR3_Val; //
写比较值占空比

TIM_OC3Init(TIM3, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //
使能预装载寄存器

/******************************
通道
4 *********************************/
/* PWM1 Mode configuration: Channel4 */
TIM__OutputState = TIM_OutputState_Enable; //PWM
波输出使能

TIM__Pulse = CCR4_Val; //
写比较值占空比

TIM_OC4Init(TIM3, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); //
使能预装载寄存器

TIM_ARRPreloadConfig(TIM3, ENABLE); //
重新装载计数使能

}

TIM3 PWM IO
口设置

void GPIO_ TIM3_ Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);//
使能时钟

GPIO_InitTypeDef GPIO_InitStructure; //
声明初始化结构体

GPIO__Pin = GPIO_Pin_6 | GPIO_Pin_7; //
指定
IO


GPIO__Mode = GPIO_Mode_AF_PP; //
模式为复用推挽输出

GPIO__Speed = GPIO_Speed_50MHz; //
最大速度
50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //
执行
GPIO
初始化

GPIO__Pin = GPIO_Pin_0 | GPIO_Pin_1; //
指定
IO


GPIO_Init(GPIOB, &GPIO_InitStructure); //
执行
GPIO
初始化

}
TIM3 PWM
波占空比装载函数

TIM_SetCompare4(TIM3,CCR4_Val);
T=NxP/72MHz
其中
N
为周期数,
P
为分频数。



N=
TIM_Period-
CCRx_Val

T
即 为所配出的
PWM
的周期。




UART
串口

UART
功能设置

void UART_ Configuration(void)
{
USART_InitTypeDef USART_InitStructure;//
声明串口结构体

USART__BaudRate = 115200;//
波特率为
115200
USART__WordLength = USART_WordLength_8b;//
数据长度
8


USART__StopBits = USART_StopBits_1;//1
位停止位

USART__Parity = USART_Parity_No;//
无奇偶校验


USART__HardwareFlowControl = USART_HardwareFlowCon trol_None;//
不使能硬件
流控制

USART__Mode = USART_Mode_Rx | USART_Mode_Tx;//
使能发送,接收

USART_Init(USART1, &USART_InitStructure);//
初始化串口

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//
串口接收中断使能

//USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //
串口发送中断使能

USART_Cmd(USART1, ENABLE);//
串口使能

}
UART IO
口设置

void UART_ GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//
声明
GPIO
结构体


RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|
RCC_APB2Periph_AFIO,
ENABLE);//
使能串口
1

复用
IO
时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//
使能
GPIOA
时钟

GPIO__Pin = GPIO_Pin_9;
GPIO__Speed = GPIO_Speed_50MHz;
GPIO__Mode = GPIO_Mode_AF_ PP;//GPIOA9
为串口发送引脚,设置为复用推挽输出
模式

GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO__Pin = GPIO_Pin_10;
GPIO__Speed = GPIO_Speed_50MHz;
GPIO__Mode = GPIO_Mode_IN_FLOATING; //GPIOA10
为串口接收引脚,设置为浮
空输入

GPIO_Init(GPIOA, &GPIO_InitStructure);
}

UART
中断初始化

void NVIC_UART_Configuration(void)
{

NVIC_InitTypeDef NVIC_InitStructure;//
声明串口初始化结构体

NVIC _PriorityGroupConfig(NVIC_PriorityGroup_1);//
设 置优先级组

NVIC__IRQChannel = USART1_IRQn;//
指定中断类型

NVIC__IRQChannelPreemptionPriority = 0;//
设置先占优先级

NVIC__IRQChannelSubPriority = 0;//
设置从优先级

NVIC__IRQChannelCmd = ENABLE;//
使能中断

NVIC_Init(&NVIC_InitStructure);//
执行初始化函数

}

-


-


-


-


-


-


-


-



本文更新与1970-01-01 08:00,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/553637.html
    上一篇:没有了
    下一篇:没有了

的相关文章