手把手教你STM32笔记(2)

2020-03-27 13:03

按键扫描函数同以前的一样不必多讲 主要是讲解IO口作为输入口的设置: GPIO通用设置

GPIO_Set函数的前两个参数是用于来定位具体的哪一个IO口的,第三个参数是设置输入输出模式的

按键是普通输入模式,第四第五参数是与输出有关的,写为0即可,最后一个参数设置需要看按键按下是高电平则设置为下拉,按键按下是低电平则设置为上拉。

串口实验:

串口初始化函数参数:第一个是APB2的时钟PCLK2。第二个是波特率,不用多说 uart_init(84,115200);

时钟设置:需要设置两个时钟,一个相应外设的时钟,一个是对应的IO口的时钟。

APB2的时钟PCLK2的设置,默认系统SYSCLK=168时候APB2=84MHz 设置需要自己配置寄存器(自己测试) RCC_CFGR寄存器设置:

[15:13]APB2(高速)从PHB而来,可以设置自己的分频(1,2,4,8,16)最高84MHz,系统默认是不分频

[12:10]APB1(低速)从PHB而来,可以设置自己的分频(1,2,4,8,16)最高42MHz,系统默认是不分频

[7:4]AHB从SYSCLK而来,可以设置自己的分频(1,2,4,8,16,64,128,236,512)当使用以太网时候AHB时钟至少为25MHz

在系统时钟分设置时候早已经将APB2设置为2分配,PHB不分频,APB1设置为4分频

IO口设置分为通用设置和复用设置 GPIO设置 :

GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);

设置相应的功能:设置为推挽上拉输出,且为复用模式 复用输出GPIO_AF_Set(GPIOA,9,7);

前两个参数是定位IO口,后面一个参数是定位属于哪一中复用

AF0:MCO/SWD/SWCLK/RTC AF1:TIM1/TIM2;

AF2:TIM3~5; AF3:TIM8~11

AF4:I2C1~I2C3; AF5:SPI1/SPI2; AF6:SPI3; AF7:USART1~3;

AF8:USART4~6; AF9:CAN1/CAN2/TIM12~14 AF10:USB_OTG/USB_HS AF11:ETH

AF12:FSMC/SDIO/OTG/HS AF13:DCIM AF14: AF15:EVENTOUT 串口中断设置:

MY_NVIC_Init(NVIC_PreemptionPriority,NVIC_SubPriority,NVIC_Channel, NVIC_Group) 4个参数:分别是 抢占优先级数: 响应优先级数:

中断编号:在顶层头文件stm32f4xx.h中包含定义是一个枚举类型:IRQn类型数据

中断分组:0~4组

//组0:0位抢占优先级,4位响应优先级 //组1: 1位抢占优先级,3位响应优先级 //组2: 2位抢占优先级,2位响应优先级 //组3: 3位抢占优先级,1位响应优先级 //组4: 4位抢占优先级,0位响应优先级

串口发送时候可以正常使用printf函数,同以前学习的C语言一样使用,注意一点是换行必须是\\r\\n一起使用才行。 外部中断使用:

外部中断分两部分,初始化与中断服务程序的编写 初始化:

第一步:外部中断一般必须要与按键输入一起使用,所以外部中断必须有与按键一样的IO初始化,直接照搬过来即可 第二步:中端口映射与触发设置(包括开启中断) Ex_NVIC_Config(GPIO_E,2,FTIR);

参数1与参数2是选择映射的IO口,参数3是触发模式:FTIR=1标示下降沿触发,RTIR=2标示上升沿 3标示任意沿

注意该函数一次调用只能设置一个IO口,多个口需要多次调用 第三步:设置中断分组优先级以及终端号(包括是使能中断) MY_NVIC_Init(NVIC_PreemptionPriority,NVIC_SubPriority,NVIC_Channel, NVIC_Group) 该函数同上,串口处已经讲过 中断服务函数部分:

void EXTI0_IRQHandler(void) {

delay_ms(10); if(WK_UP==1) {

BEEP=!BEEP;

}

EXTI->PR=1<<0; //

}

中断服务程序是一个函数,该函数的函数名是一个固定的,叫做中断向量,定义在启动文件startup_stm32f40_41xxx.s中,已经被定义好了,不能随便定义。所有的中断服务程序函数名都在这里被定义了。用的时候去选用就行了。注意外部中断的0~4外部中断是每一个单独的外部中断,5~9公用一个中断服务程序:EXTI9_5_IRQHandler 10~15公用:EXTI15_10_IRQHandler

中断服务函数执行完毕前要清除中断标志:EXTI->PR=1<<0;

请标志是在相应的寄存器(挂起寄存器Pending Register)的相应为置1,而不是清零

当中断公用一个中断服务函数时候如何进行区分:

可以在中断服务程序里检测判断:通道读取各个中断对应的IO口的状态进行判断。


手把手教你STM32笔记(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:检验科应急预案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: