教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

蓝桥杯竞赛板使用笔记(3)

来源:网络收集 时间:2026-08-29
导读: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//配置为模拟输入模式 GPIO_Init(GPIOB, /* ADC1 configuration ----------------------------------------------------

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//配置为模拟输入模式 GPIO_Init(GPIOB, &GPIO_InitStructure); /* ADC1 configuration ------------------------------------------------------*/ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//此处配置单通道独立

模式或多通道扫描模式

ADC_InitStructure.ADC_ScanConvMode = DISABLE;//扫描模式禁止

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//连续转换使能

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不使用外

部触发

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//字节右对齐 ADC_InitStructure.ADC_NbrOfChannel = 1;//转换通道数为1 ADC_Init(ADC1, &ADC_InitStructure);

/* ADC1 regular channel14 configuration */

ADC_RegularChannelConfig(ADC1,ADC_Channel_8,1,ADC_SampleTime_55Cycles5); //设置ADC通道转换

/* Enable ADC1 reset calibration register */ ADC_ResetCalibration(ADC1);

/* Check the end of ADC1 reset calibration register */ while(ADC_GetResetCalibrationStatus(ADC1));

/* Start ADC1 calibration */ ADC_StartCalibration(ADC1);

/* Check the end of ADC1 calibration */

while(ADC_GetCalibrationStatus(ADC1)); //对ADC的校准,库中复制过来即可

/* Start ADC1 Software Conversion */

ADC_SoftwareStartConvCmd(ADC1, ENABLE);// 软件触发ADC转换开始

然后在主函数中通过函数不断查询的到转换结果并显示: while(1) {

}

ADCValue=ADC_GetConversionValue(ADC1)*3.30/0xfff;

sprintf(str,\注意此函数把浮点数转换成字符串的格式 LCD_DisplayStringLine(Line5,str);

八、 TIMER

Stm32的定时器是比较复杂,但绝不能想的太复杂,被官方给的一百余页介绍文档给吓倒。主要就这个这个原理图,看懂就全懂了。

对于一般的应用(时基计数、PWM输出、输入捕获),弄清楚三个寄存器即可,分别是自动重装载寄存器、CNT计数器、捕获/比较1234寄存器。

1、 时基计数功能:经过分频设置好时钟源后,CNT就开始(递增或递减)计数,若设

置了更新中断,则当CNT递减至0时,产生更新中断,同时自动重装载寄存器的值会给到CNT计数寄存器,重新下一周期的计数。(设置为计数器递增模式时类似)。 具体对定时器的设置代码如下:

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_TimeBaseStructure.TIM_Period = 999;//设置自动重载值

TIM_TimeBaseStructure.TIM_Prescaler = 7199;//设置分频值:72M/(7199+1) TIM_TimeBaseStructure.TIM_ClockDivision = 0;//时钟分割,用于滤波,不用设0即可 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

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

此时定时器的基本设置已好,然后打开中断,在中断服务函数中设置计数变量累加,最简单的定时功能就实现了。。。。关于中断的频率,简单一句话:定时器以所设置的分频后的时钟频率,每计数至自动重载值(或由重载值减至零)时中断一次。。

//NVIC的设置省略 /* TIM IT enable */

TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//使能更新中断

void TIM2_IRQHandler(void) {

if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET)//判断更新中断置位与否 { Timcnt++; } }

2、 PWM输出功能 从原理图上可以看出,每个定时器都有独立的四个通道,但是共用

一个CNT,即对每个定时器的四个通道而言,其时基是相同的,不同的是各通道比较寄存器的值,从而每个定时器都可产生4路频率相同而占空比不同的PWM波(特别注意这里是对每一个定时器而言的)。

具体原理过程是,CNT以设置好的频率计时,CNT的数值范围是0至重载寄存器的值(即PWM的周期),对PWM模式1且输出极性为高(。。。)而言,当CNT的值在0至 [捕获寄存器值]时,输出高点平,当CNT的值在[捕获寄存器值]至[重载寄存器值]时,输出低电平。所以不难看出,通过对预分频寄存器、自动重载寄存器、比较寄存器进行设置,即可生成不同频率不同占空比的PWM。 具体代码如下:

//对时基的设置同前…。。。

//每个TIM通道都对应一个外部GPIO,对应设置为GPIO_Mode_AF_PP复用推挽输出模式(略)

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//PWM输出模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出使能 TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_Pulse = 300;//设置比较寄存器的值

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性高 TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;

TIM_OC2Init(TIM2, &TIM_OCInitStructure);

完毕。。

若在程序运行中要更改占空比,调用如下函数:

TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除更新中断

…… 此处隐藏:1348字,全部文档内容请下载后查看。喜欢就下载吧 ……
蓝桥杯竞赛板使用笔记(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/614120.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)