【蓝桥杯嵌入式】比赛笔记(2)根据固件库快速配置各模块初始化

因为蓝桥杯比赛时间很短,并且如果自己去记忆各模块初始化的话,也难免有问题,所以这里给出一个通过固件库的快速初始化模块的方法。

比赛提供固件库的:

目录

  • 【蓝桥杯嵌入式】比赛笔记(2)根据固件库快速配置各模块初始化
  • GPIO(LED KEY BUZZ)
    • 位置
    • 有用的地方
  • RTC
    • 位置
    • 有用的地方
      • RTC初始化配置
      • 时间显示函数
      • 中断配置
      • 中断函数
      • 主函数显示
  • LCD修改
  • TIM_Base
    • 位置
    • 有用的地方
      • 配置TIM
      • NVIC配置
      • 中断服务函数配置
  • TIM_PWM
    • 位置
    • 有用的地方
      • PWM定时器配置
      • PWM输出管脚配置
  • EXTI配置
    • 位置
    • 有用的地方
      • EXTI配置
      • 中断函数部分
  • ADC
    • 位置
    • 有用的地方
      • 配置ADC
      • 引脚配置
      • 读ADC函数
  • USART
    • 位置
    • 有用的地方
      • 串口配置

GPIO(LED KEY BUZZ)

位置

…\赛点资源数据包_嵌入式_2019\6-STM32固件库代码V3.5版\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\GPIO\IOToggle\main.c

有用的地方

注意

  • 需要修改为要初始化的输入引脚,如果是KEY按键的GPIO的话,GPIO_MODE选择GPIO_Mode_IPU;
  • 需要注意初始化BUZZ时,注意加这两行代码:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE); GPIO_Init(GPIOB, &GPIO_InitStructure);//¸ü¸ÄËäÓÐJTAGÒý½Å״̬

RTC

位置

…\赛点资源数据包_嵌入式_2019\6-STM32固件库代码V3.5版\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\RTC\LSI_Calib

有用的地方

RTC初始化配置

并把红框内部分修改为:

RTC_SetCounter(HH*3600+MM*60+SS);
RTC_WaitForLastTask();

时间显示函数


把红框中的printf改为sprintf,并加入一行LCD显示函数。

中断配置

中断函数

在main.c文件夹的stm32f10x_it.c中

删除红框行

主函数显示

显示的话参考main.c中的Time_Show()的while循环

LCD修改

LCD直接使用官方提供的lcd.c和lcd.h就行,但是在运行LCD代码时,会干扰LED也发生反转,这时需要在LCD.c的LCD_WriteReg(),LCD_WriteRAM_Prepare(),LCD_WriteRAM()
三个函数中,函数第一行加上"unsigned short PCOUT=GPIOC->ODR;",最后一行加上"GPIOC->ODR=PCOUT;",用于锁存M74HC573M1R

TIM_Base

位置

…\赛点资源数据包_嵌入式_2019\6-STM32固件库代码V3.5\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\TIM\TimeBase

有用的地方

配置TIM

复制void NVIC_Configuration(void)RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);时情况修改RCC时钟。

在主函数中:

98到130行的配置通道的不需要,同时修改预分频值和TIM_ITConfig()函数,改为:TIM_ITConfig(TIM3,TIM_IT_Update, ENABLE);
同时别忘加上一行:TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

NVIC配置

复制main.c中的:

记得修改中断通道为使用的部分。

中断服务函数配置

这个就别复制了。。有点麻烦,直接记一下吧:

void TIM3_IRQHandler(void)
{if(TIM_GetFlagStatus(TIM3,TIM_FLAG_Update) == SET){//Çå³ý±ê־λTIM_ClearFlag(TIM3,TIM_FLAG_Update);//}
}

TIM_PWM

位置

…赛点资源数据包_嵌入式_2019\6-STM32固件库代码V3.5\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\TIM\7PWM_Output
注意,是7PWM_Output这个文件夹!!

有用的地方

PWM定时器配置

main.c中

黄框内设置为自己想要的频率,例如若填入999,则为1KHz

记得在代码前面添加开启相关时钟,以及定义结构体代码
以及预分频设置代码

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);    //TIM2预分频设置:1MHZ,APB1分频系数2,输入到TIM3时钟为36MHzx2 = 72MHz  TIM_PrescalerConfig(TIM2,71, TIM_PSCReloadMode_Immediate);

Channel2Pulse等为自己定义的变量(uint_8)类型的

PWM输出管脚配置

这个记得输出模式是GPIO_Mode_AF_PP就行

EXTI配置

位置

…\赛点资源数据包_嵌入式_2019\6-STM32固件库代码V3.5版\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\EXTI\EXTI_Config

有用的地方

EXTI配置

main.c函数中的void EXTI0_Config(void)void EXTI9_5_Config(void)直接复制到自己工程中的EXTI_Config()函数中:


黄框部分按照要求改;然后注意初始化引脚的修改,蓝桥杯板子上,对应的这两个中断是PA0 PA8,就行了
记得在代码中加入:

EXTI_InitTypeDef   EXTI_InitStructure;
GPIO_InitTypeDef   GPIO_InitStructure;
NVIC_InitTypeDef   NVIC_InitStructure;

中断函数部分

打开stm32f10x_it.c文件:

红框部分删除即可,最后效果应该这样:

void EXTI0_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line0) != RESET){EXTI_Status = 1;EXTI_ClearITPendingBit(EXTI_Line0);}
}
/*** @brief  This function handles EXTI9_5 interrupt request.* @param  None* @retval None*/
void EXTI9_5_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line8) != RESET){EXTI_Status = 2;EXTI_ClearITPendingBit(EXTI_Line8);}
}

EXTI_Status是在主函数中定义的一个flag作用的变量,用来查看是哪个按键被按下。

ADC

位置

…\赛点资源数据包_嵌入式_2019\6-STM32固件库代码V3.5版\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\ADC\AnalogWatchdog

有用的地方

配置ADC

main.c中。黄框为需要修改的地方,红框为删除的地方,ADC通道一般使用8蓝桥杯的ADC_Channel_8,对于是否允许连续转换的地方,官网给的是不允许,但是允许也行,我不太明白为啥,欢迎评论区留言

记得添加代码(时钟和定义结构体)

ADC_InitTypeDef ADC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

引脚配置

记得模式选择GPIO_Mode_AIN就行,引脚为PB0。

读ADC函数

这个就得自己写了:

float Read_ADC(void)
{float ADC_VALUE;ADC_SoftwareStartConvCmd(ADC1,ENABLE);while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==0);ADC_VALUE = ADC_GetConversionValue(ADC1)*3.30/0xfff;ADC_SoftwareStartConvCmd(ADC1,DISABLE);return ADC_VALUE;}

可以写一个读ADC的标记位,然后配置Systick中断。

USART

位置

…\赛点资源数据包_嵌入式_2019\6-STM32固件库代码V3.5版\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART\Interrupt

有用的地方

串口配置

首先复制main.c的主函数中:


除了被红线划掉的代码,然后再去GPIO_Configuration();中,主要参考他RX引脚配置GPIO_Mode_IN_FLOATING,TX引脚配置GPIO_Mode_AF_PP
以下代码参考主要


然后记得在代码前加上:

    GPIO_InitTypeDef  GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

2021年4月3日17:18:27

【蓝桥杯嵌入式】比赛笔记(2)根据固件库快速配置各模块初始化相关推荐

  1. 第九届蓝桥杯-嵌入式比赛体会与备赛经验

    原文地址:http://www.cnblogs.com/NickQ/p/8721317.html 说起蓝桥杯,相信很多电子类的学生,应该很熟悉了吧...上周日,我也去湖北工业大学参与了一下.说起这次经 ...

  2. 蓝桥杯嵌入式比赛知识点合集(现在什么都有好吧)

    目录 新建工程 LCD sprintf 格式 输出百分号 输出格式:%R memset函数 LCD_DisplayStringLine函数 嘀嗒定时器 高亮 行高亮 一两个字符高亮 单个字节高亮 使用 ...

  3. 蓝桥杯嵌入式比赛LCD屏如何高亮显示某一个字符

    蓝桥杯嵌入式第九届赛题用到了高亮显示,主要由 void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii);函数来完成,这个函数不再是一下子操作一行了,而是一 ...

  4. 第十三届蓝桥杯嵌入式备赛-STM32G431-基础模块调试①LED/LCD调试

    目录 0.前言 时钟设置 项目设置 1.功能要求 电路原理图 2.STM32Cubemx初始化 3.程序实现 LCD LED 编写LED灯亮灭的相关函数 LED关闭函数 LEDx开启函数 LEDx关闭 ...

  5. 第十三届蓝桥杯嵌入式备赛-STM32G431-进阶模块调试⑦RTC时钟

    目录 0.前言 1.功能要求 2.STM32Cubemx初始化 3.程序实现 main.c相关初始化 RTC函数 RTC_CalendarGet()日期时间获取函数 设置日期RTC_SetDate和时 ...

  6. 蓝桥杯嵌入式板-解决LCD使LED亮灭混乱的办法

    比赛板用的是stm32f103RB芯片,64管脚,LED与LCD同用了管脚PC8~PC15(对应LED1~LED8),所以板子上增用了一个锁存器--M74HC573.在控制LED的时候,只需在输出对应 ...

  7. 【蓝桥杯嵌入式主板G4】第三章 点亮一个LED

    第一节 硬件解读 任何一个实验都是从点亮一个LED开始的,本次将教大家如何用stm32cubeMX+MDK在蓝桥杯嵌入式主板上面点亮一个LED. 先看蓝桥杯嵌入式主板的原理图:从图中可以看出一共有8个 ...

  8. 第十二届蓝桥杯嵌入式——赛后总结

    目录 前言 主观题分析 LED 按键 串口 数据处理 查询与存储 停车费计算 其它部分 按键切屏 空闲车位亮灯 PWM和低电平切换亮灯 赛后总结 前言 本人系第一年参加蓝桥杯嵌入式,本文仅作为自己的赛 ...

  9. 蓝桥杯嵌入式(STM32G431RBT6)入门第四天——系统嘀嗒定时器(SysTick)|CSDN创作打卡

    和往常一样,先建立SysTick定时器练习文件夹,并在里面建立SysTick_test和SysTick两个子文件夹. STM32的通用定时器是通过一个可编程预分频器(Prescaler)驱动的16位自 ...

最新文章

  1. 因脉脉上的匿名消息,拼多多员工被开除了!
  2. Java开发SVM之Eclipse集成LibSVM示例
  3. xmind怎么在左边创建_个人怎么做微信小程序商城
  4. java 9 module_Java 9:欢迎来到Module World
  5. 我来告诉你优秀的产品经理是如何管理需求的
  6. 关于常用的编码工具如何引入jar包
  7. 洛谷P2534 [AHOI2012]铁盘整理
  8. 如何对聚类结果进行分析_产品经理如何进行数据分析?
  9. python设计模式(二十二):策略模式
  10. serverlet生命周期
  11. DPDK ipv4 ip分片与重组
  12. Rethinking Visual Geo-localization for Large-Scale Applications 论文阅读CosPlace
  13. ionic入门教程第十一课-简要说明ion-list、ion-item完成列表页ion-infinite-scroll上拉加载ion-refresher下拉刷新
  14. [游戏]求生之路超级专家难度模式
  15. 揭秘玛雅预言--根本没这回事
  16. 学习Hibernate框架笔记-第2天
  17. Prim算法java实现
  18. 有源带通滤波器快速实现
  19. 不要妄想消费者忠诚于我们的品牌!
  20. 2009春节联欢晚会

热门文章

  1. 如果你现在是蚂蚁花呗的产品负责人,你要怎么做才能把花呗的营业额提升一倍?
  2. VBScript教程 一、VBScript简介
  3. 同济大学计算机夏令营2021,同济大学2021年优秀学生暑期学校活动通知
  4. Windows XP 安装使用的序列号
  5. Linux主机与Windows虚拟机之间创建共享文件夹
  6. mysql获取本年、本月起止时间
  7. DJYGUI系列文章一:DJYGUI图形系统介绍
  8. PP实施经验分享贴(1)——月底生产订单关闭怎样不影响正常生产业务
  9. Lunix文件权限和目录配置
  10. 试着习惯人来人往——快乐是自找的