【蓝桥杯嵌入式】比赛笔记(2)根据固件库快速配置各模块初始化
【蓝桥杯嵌入式】比赛笔记(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)根据固件库快速配置各模块初始化相关推荐
- 第九届蓝桥杯-嵌入式比赛体会与备赛经验
原文地址:http://www.cnblogs.com/NickQ/p/8721317.html 说起蓝桥杯,相信很多电子类的学生,应该很熟悉了吧...上周日,我也去湖北工业大学参与了一下.说起这次经 ...
- 蓝桥杯嵌入式比赛知识点合集(现在什么都有好吧)
目录 新建工程 LCD sprintf 格式 输出百分号 输出格式:%R memset函数 LCD_DisplayStringLine函数 嘀嗒定时器 高亮 行高亮 一两个字符高亮 单个字节高亮 使用 ...
- 蓝桥杯嵌入式比赛LCD屏如何高亮显示某一个字符
蓝桥杯嵌入式第九届赛题用到了高亮显示,主要由 void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii);函数来完成,这个函数不再是一下子操作一行了,而是一 ...
- 第十三届蓝桥杯嵌入式备赛-STM32G431-基础模块调试①LED/LCD调试
目录 0.前言 时钟设置 项目设置 1.功能要求 电路原理图 2.STM32Cubemx初始化 3.程序实现 LCD LED 编写LED灯亮灭的相关函数 LED关闭函数 LEDx开启函数 LEDx关闭 ...
- 第十三届蓝桥杯嵌入式备赛-STM32G431-进阶模块调试⑦RTC时钟
目录 0.前言 1.功能要求 2.STM32Cubemx初始化 3.程序实现 main.c相关初始化 RTC函数 RTC_CalendarGet()日期时间获取函数 设置日期RTC_SetDate和时 ...
- 蓝桥杯嵌入式板-解决LCD使LED亮灭混乱的办法
比赛板用的是stm32f103RB芯片,64管脚,LED与LCD同用了管脚PC8~PC15(对应LED1~LED8),所以板子上增用了一个锁存器--M74HC573.在控制LED的时候,只需在输出对应 ...
- 【蓝桥杯嵌入式主板G4】第三章 点亮一个LED
第一节 硬件解读 任何一个实验都是从点亮一个LED开始的,本次将教大家如何用stm32cubeMX+MDK在蓝桥杯嵌入式主板上面点亮一个LED. 先看蓝桥杯嵌入式主板的原理图:从图中可以看出一共有8个 ...
- 第十二届蓝桥杯嵌入式——赛后总结
目录 前言 主观题分析 LED 按键 串口 数据处理 查询与存储 停车费计算 其它部分 按键切屏 空闲车位亮灯 PWM和低电平切换亮灯 赛后总结 前言 本人系第一年参加蓝桥杯嵌入式,本文仅作为自己的赛 ...
- 蓝桥杯嵌入式(STM32G431RBT6)入门第四天——系统嘀嗒定时器(SysTick)|CSDN创作打卡
和往常一样,先建立SysTick定时器练习文件夹,并在里面建立SysTick_test和SysTick两个子文件夹. STM32的通用定时器是通过一个可编程预分频器(Prescaler)驱动的16位自 ...
最新文章
- 因脉脉上的匿名消息,拼多多员工被开除了!
- Java开发SVM之Eclipse集成LibSVM示例
- xmind怎么在左边创建_个人怎么做微信小程序商城
- java 9 module_Java 9:欢迎来到Module World
- 我来告诉你优秀的产品经理是如何管理需求的
- 关于常用的编码工具如何引入jar包
- 洛谷P2534 [AHOI2012]铁盘整理
- 如何对聚类结果进行分析_产品经理如何进行数据分析?
- python设计模式(二十二):策略模式
- serverlet生命周期
- DPDK ipv4 ip分片与重组
- Rethinking Visual Geo-localization for Large-Scale Applications 论文阅读CosPlace
- ionic入门教程第十一课-简要说明ion-list、ion-item完成列表页ion-infinite-scroll上拉加载ion-refresher下拉刷新
- [游戏]求生之路超级专家难度模式
- 揭秘玛雅预言--根本没这回事
- 学习Hibernate框架笔记-第2天
- Prim算法java实现
- 有源带通滤波器快速实现
- 不要妄想消费者忠诚于我们的品牌!
- 2009春节联欢晚会