老师您好我是一爱好者想做一个单片机按键控制数码管控制的振荡器从赫兹到兆赫兹,单片机按键控制数码管是是stm32f767lgt的

STM32单片机学习---PWM输出
上午花了半天时间熟悉了stm32的PWM模块。中午利用午饭时间把PWM功能调试成功。当然,很简单的东西,也许很多前辈估计都不屑一顾的东西。
今天最大的感叹就是网络资源实在是个巨大的宝库,真的很庆幸,在这个复杂的社会环境里,在一个到处充斥着私心、私利的时代,各个网站,各个论坛上的众多网友都时刻保持着开源的氛围。学习一定要和他人交流,而网络提供了这么一个极好的平台。
废话少说,言归正传。
实现功能:采用定时器2的通道2,使PA1输出频率1K,占空比40的PWM波形,用PA8随意延时取反led灯,指示程序运行。
首先熟悉一下定时器的PWM相关部分。看图最明白
其实PWM就是定时器的一个比较功能而已。
CNT里的值不断++,一旦加到与CCRX寄存器值相等,那么就产生相应的动作。这点和AVR单片机很类似。既然这样,我们要产生需要的PWM信号,就需要设定PWM的频率和PWM的占空比。
首先说频率的确定。由于通用定时器的时钟来源是PCLK1,而我又喜欢用固件库的默认设置,那么定时器的时钟频率就这样来确定了,如下:
AHB(72MHz)→APB1分频器(默认2)→APB1时钟信号(36MHz)→倍频器(*2倍)→通用定时器时钟信号(72MHz)。
这里为什么是这样,在RCC模块学习记录里有详细记载,不多说。
因此图中的CK_PSC就是72MHz了。
下面的资料也是网上一搜一大把,我就罗列了:
STM32的PWM输出有两种模式,模式1(PWM1)和模式2(PWM2),由TIMx_CCMRx寄存器中的OCxM位确定的(“110”为模式1,“111”为模式2)。模式1和模式2的区别如下:
110:PWM模式1-在向上计数时,一旦TIMx_CNT=TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
111:PWM模式2-在向上计数时,一旦TIMx_CNT=TIMx_CCR1时通道1为有效电平,否则为无效电平。
由此看来,模式1和模式2正好互补,互为相反,所以在运用起来差别也并不太大。我用的是模式一,因此后面的设定都是按照模式一来设定的。
PWM的周期是就是由定时器的自动重装值和CNT计数频率决定的。而CNT的计数时钟是CK_PSC经分频器PSC得到,因此CNT的时钟就是CK_PSC/分频系数。这个分频系数在TIM_TimeBaseStructure.TIM_Prescaler确定。我设置的值是72,因此CNT的计数频率也就是CK_CNT的频率为1MHz。
下一步就是确定定时器自动重装值。因为CNT每自加到ARR寄存器的值时就会自动清零,当然前提是设定为为向上计数模式,而就是根据这个溢出事件来改变PWM的周期。所以PWM信号的频率由ARR的值来确定。我设置的值是1000-1,即TIM_TimeBaseStructure.TIM_Period
= 1000-1;因此PWM的周期是1MHz/1000=1KHz。
接下来就要确定PWM的占空比了。因为CNT在自加到ARR值的过程中会不断和CRRX的值相比较,一旦二者相等就产生匹配事件,但要注意CNT不会理会这件事,它会继续++直到等于ARR。而CRRX的值我设定为400-1,那么占空比就随之确定为40%。
好了,下面就是库函数的配置了。
TIMER输出PWM实现步骤
设置RCC时钟;
设置GPIO;
设置TIMx定时器的相关寄存器;
设置TIMx定时器的PWM相关寄存器。
首先是main函数和全局变量申明,很简单,不作说明
GPIO_InitTypeDef GPIO_InitS
TIM_TimeBaseInitTypeDef TIM_TimeBaseS
TIM_OCInitTypeDef TimOCInitS
int main(void)
rcc_cfg();
gpio_cfg();
tim2_cfg();
pwm_cfg();
& while (1)
GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_RESET);
下面是IO口的配置:
void gpio_cfg()
& RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,
& GPIO_InitStructure.GPIO_Speed =
GPIO_Speed_50MHz;
& GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
& GPIO_InitStructure.GPIO_Mode =
GPIO_Mode_Out_PP;
& GPIO_Init(GPIOA, &GPIO_InitStructure);
& GPIO_InitStructure.GPIO_Speed =
GPIO_Speed_50MHz;
& GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
& GPIO_InitStructure.GPIO_Mode =
GPIO_Mode_AF_PP;
& GPIO_Init(GPIOA, &GPIO_InitStructure);
此处要注意的是PWM输出口要配置为复用推挽输出,原因我也不知道,反正照搬就是了。
下面是TIM配置函数,注释很清楚了,不作说明:
void tim2_cfg()
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
& TIM_DeInit(TIM2);
& TIM_InternalClockConfig(TIM2);
& //预分频系数为72,这样计数器时钟为72MHz/72 = 1MHz
& TIM_TimeBaseStructure.TIM_Prescaler = 72;
& //设置时钟分割
& TIM_TimeBaseStructure.TIM_ClockDivision =
TIM_CKD_DIV1;
& //设置计数器模式为向上计数模式
& TIM_TimeBaseStructure.TIM_CounterMode =
TIM_CounterMode_Up;
& //设置计数溢出大小,每计1000个数就产生一个更新事件
& TIM_TimeBaseStructure.TIM_Period = 1000-1;
& //将配置应用到TIM2中
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
& //禁止ARR预装载缓冲器
& TIM_ARRPreloadConfig(TIM2, DISABLE);
& TIM_Cmd(TIM2, ENABLE);&
//使能TIMx外设
接下来是关键的PWM的配置函数:
void pwm_cfg()
//设置缺省值
TIM_OCStructInit(&TimOCInitStructure);
//PWM模式1输出
TimOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
//设置占空比,占空比=(CCRx/ARR)*100%或(TIM_Pulse/TIM_Period)*100%
TimOCInitStructure.TIM_Pulse = 400-1;
//TIM输出比较极性高
TimOCInitStructure.TIM_OCPolarity =
TIM_OCPolarity_H
//使能输出状态
TimOCInitStructure.TIM_OutputState =
TIM_OutputState_E
//TIM2的CH2输出
TIM_OC2Init(TIM2,
&TimOCInitStructure);
//设置TIM2的PWM输出为使能
TIM_CtrlPWMOutputs(TIM2,ENABLE);
stm32固件库的输出比较单元结构体与定时器的时基单元是分开定义的,而PWM模式只是输出比较结构体成员TimOCInitStructure.TIM_OCMode的一个取值,当把此结构体填充完后,还要映射到某个定时器,用TIM_OCXInit函数实现,我用了一个X,说明不止一个这样的函数,事实上,stm32的通用定时器都有四个通道,每个通道对应一个初始化函数,这里真够纠结的!最后还要使能该定时器的PWM输出功能,TIM_CtrlPWMOutputs(TIM2,ENABLE)函数要注意,是outputs而不是output,说明TIM2不止一个通道嘛!够复杂,够繁琐的!
下面是输出比较单元的结构体原型:
typedef struct
& uint16_t
TIM_OCM&&&&&&&
& uint16_t
TIM_OutputState;&&
& uint16_t
TIM_OutputNS&
& uint16_t
TIM_Pulse;&&&&&&&&
& uint16_t
TIM_OCPolarity;&&&
& uint16_t
TIM_OCNP&&
& uint16_t
TIM_OCIdleS&&
& uint16_t
TIM_OCNIdleS&
} TIM_OCInitTypeD
其中没有加色的成员是高级定时器才有的,通用定时器就不用管了。
这里还有个TimOCInitStructure.TIM_OCPolarity 成员需要注意,它有什么作用呢?在网上查的资料,如下图:
前面说到pwm有pwm1和pwm2两种模式,这两种模式只能控制到OCXREF为止,TIM_OCPolarity
能控制OC1是直接等于OCXREF,还是取反极性!OC1才是最终的PWM信号。
这里有个小插曲,我用示波器去测量PWM信号,发现信号居然是双极性的,然后改变TIM_OCPolarity
,再测,还是双极性,只是倒了个跟头。还真以为stm32单片机能输出两极性的PWM,后面把示波器改为直流档(之前用的是交流档),波形才从零电位一下纵向移上去。以后要注意!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。能用stm32单片机做微型电脑吗,自己向stm32单片机里写一个微型操作系统_百度知道
能用stm32单片机做微型电脑吗,自己向stm32单片机里写一个微型操作系统
能用stm32单片机做微型电脑吗,自己向stm32单片机里写一个微型操作系统,可以以hdmi的形式插到显示器上,然后用鼠标来读取m.2固态硬盘里的文件,可以播放视频,音乐,修改文档啥的。顺便问问能够用多个stm32单片机来协作处理吗?
我有更好的答案
估计STM32不行,达不到你的性能要求。我们常说的STM32一般指的是STM32F10x系列的,很明显,这个级别的性能根本达不到要求,最多跑个ucos系统,连linux系统都上不了。linux系统至少要ARM9或ARM11的性能,TM32F10x系列也就比ARM7强一些。另外hdmi,固态硬盘,这些东西对总线的速度要求相当高,和STM32的72M根本不是一个级别的,光是速度上就跟不上,更不说内存之类的了。总之,STM32F10x系列只能算是一辆自行车,最多拉个人什么的,你想在上面停放几个战斗机,那是航母干的事情,即使你只想在上面放些大东西,至少得弄个货车吧。即使是稍好一点的STM32F4xx系列,最多也只能算个摩托车。当然前面说的有些夸张了,当年的MP3和MP4播放器人家也做了视频音频播放,和显示。但要区别的是,人家那是没有操作系统,没有硬盘,没有HDMI,舍弃了很多东西。当然STM32本身处理不了这些事物,但外接一些辅助专用芯片是可以达到部分功能的,但那样的话,STM32就成打酱油的了。
能完美运行起来这些功能要用什么单片机
能完美运行这些的一般就不叫单片机了,叫CPU更确切,你可以看看人家手机用的什么芯片,跑linux系统用的什么芯片,就可以知道了。当然那相对于单片机来说是另一个领域了,我无法给出详情。
采纳率:90%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。学校的科技竞赛,要求做一个基于单片机的信号发生器,最高频率为一兆赫兹,单片机是12的,谁知道还需要_百度知道
学校的科技竞赛,要求做一个基于单片机的信号发生器,最高频率为一兆赫兹,单片机是12的,谁知道还需要
学校的科技竞赛,要求做一个基于单片机的信号发生器,最高频率为一兆赫兹,单片机是12的,谁知道还需要什么原件,尽量详细一点,我现在只是有个思路
我有更好的答案
就单片机都可以发出1M的信号
你是要最小系统的元件么?
我现在只有最小系统和12单片机,12m和11.0592m晶振,不知道还需要买什么元件
够了,单片机直接模拟1M信号
定时器会用么
如果是51单片机,就用定时器,如果是AVR单片机,内部有PWM,很简单的
不是还会用到放大电路,数码管,矩阵按键什么的吗
你不是说,只要一个信号么,
额,,问题比较匆忙,刚才的图片是具体要求
是可调的那种信号频率么
嗯,频率1000hz到1兆赫兹
独立按键,一个加,一个减,三极管,
ad转换器电路里需要用到什么吗
直接用AVR吧,内部有AD
手头木有啊,只有12的,而且老师的意思也是尽量用12的
哦,晚点和你讨论哈
你参加的是国赛么?
我参加的是国赛
不是啊,只是学校里的一个竞赛
国赛还有这个项目
采纳率:34%
请把要求看清楚,上面的都不要误导楼主。我不清楚你用的12单片机,是不是增强型51,如果是的话12M晶振指令周期1/12 us。不管你用定时器来做,还是软件延时能够做出 1M的正弦波 失真度小于3%
我也纠结这事呢,网上都说用51和dac0832最多只能产生几百赫兹的波,用12单片机会好点吗
stc12c5a08s2和stc12c5a16s2以及普通的stc89c52各有一片
涉及到DAC的速度,和单片机运行的速度问题建议找老师问问或者找学长问问,他们会给你专业的解答。
本回答被网友采纳
需要输出哪些波形?
为您推荐:
其他类似问题
信号发生器的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
avr单片机实验报告(共10篇).doc 60页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
avr单片机实验报告(共10篇)
你可能关注的文档:
··········
··········
avr单片机实验报告(共10篇)
AVR单片机测温实验报告
青岛科技大学
学年 第 二 学期
AVR单片机课程设计
专 业 电气工程自动化
AVR单片机课程设计报告
一.课程设计目的
1、设计要求
本课程着重于把理论学习的知识应用于实际,解决实际的工程问题,培养学生的系统设计能力,提高学生的科研动手能力。本次设计要求深入了解AVR单片机ATmega8a的功能,通过研究开发板的硬件设计,进行相关的硬件连接,选择合适的编程及程序植入方法,用开发板完成列出的各设计课题;初步学习撰写规范的设计文档;提交实验报告。
二.课程设计内容
1、基本要求:
1、 正确连接数LM35测温传感器,LCD JHD 162A液晶显示器或通过串口将数据传递至PC。
2、设定温度告警门限。
3、通过蜂鸣器、发光二极管进行告警显示。
三.课程设计过程
(一)、本实验可以分为三个部分来考虑:
1、LM35测温传感器采集温度显示在LED上。
2、设定温度告警门限。通过蜂鸣器、发光二极管进行告警显示。
3、添加按键控制温度警告门限和各功能汇总。
(二)硬件介绍
1、ATmega8
ATmega8主要特点:
具有8K程序和数据存储器(flash)
1KB内存(SRAM)
512B电擦除可编程只读存储器(EEPROM)
23个可编程的I/O接口
3路定时器/计数器
3通道PWM输出
8路10位ADC
TWI两线接口
USART通用异步串行口
SPI串行外设接口
ISP程序下载接口
ISP接口:在线可编程(in-system programming)接口,占用四条引脚,分别是:RESET,SCK,MOSI,MISO
I/O引脚:有B,C和D口,C,D为8位,B为6位。
是由National Semiconductor 所生产的温度传感器,其输出电压与摄氏温标呈线性关系,转换关系为:0 时输出为0V,每升高1℃,输出电压增加10mV。LM35 有多种不同封装型式,外观如图所示。在常温下,LM35 不需要额外的校准处理即可达到±1/4℃的准确率。其电源供应模式有单电源与正负双电源两种,本实验采用单电源模式,单电源模式在25℃下静止电流约50μA,工作电压较宽,可在4—20V的供电电压范围内正常工作非常省电。
3.LCD JHD 162A液晶显示器
(三)关键代码介绍。
/*******************************文件themo.c*********************/ #define F_CPU 1000000UL
#include util/atomic.h
#include avr/io.h
//lcd.h是lcd头文件
#include lcd.h
//ad.h是ad头文件
#include ad.h
#define SIZE 9
//滑动窗尺寸
#define buffSize 32 //显示缓冲区尺寸
//全局变量的定义
volatile int dataAD; //采样数据
volatile int flagT0 = 0; //中断Timer0运行标志
char dispBuff[buffSize];
//显示缓冲区
int count=0;//采样计数器,每隔0.2s采样一次
/********** 端口初始化 *****************************/
void initPin()
PORTB = 0xFF; //B口上拉电阻使能
DDRB = 0x00;
PORTC = 0xFF; //C口上拉电阻使能
DDRC = 0x00;
PORTD = 0xFF;
//D口上拉电阻使能
DDRD = 0x00;
/**************************************************************************/ /****************定时器初始化和定时器中断入口函数************/
/**************************************************************************/ void
正在加载中,请稍后...老师您好我是一爱好者想做一个单片机控制的振荡器从赫兹到兆赫兹,单片机是是stm32f767lgt的_百度知道
老师您好我是一爱好者想做一个单片机控制的振荡器从赫兹到兆赫兹,单片机是是stm32f767lgt的
我有更好的答案
配置定时器就好啦
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 手机蓝牙控制单片机 的文章

 

随机推荐