1、RCC相关:
APB2启动时钟项:
RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,
RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE,
RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,
RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,
RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,
RCC_APB2Periph_ALL
APB2启动函数:
RCC_APB2PeriphClockCmd(XX,ENABLE);
APB1启动时钟项:
RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, RCC_APB1Periph_TIM4,
RCC_APB1Periph_TIM5, RCC_APB1Periph_TIM6, RCC_APB1Periph_TIM7,
RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, RCC_APB1Periph_SPI3,
RCC_APB1Periph_USART2, RCC_APB1Periph_USART3, RCC_APB1Periph_USART4,
RCC_APB1Periph_USART5, RCC_APB1Periph_I2C1, RCC_APB1Periph_I2C2,
RCC_APB1Periph_USB, RCC_APB1Periph_CAN1, RCC_APB1Periph_BKP,
RCC_APB1Periph_PWR, RCC_APB1Periph_DAC, RCC_APB1Periph_ALL
APB1启动函数:
RCC_APB2PeriphClockCmd(XX,ENABLE);
AHB启动时钟项:
RCC_AHBPeriph_DMA1
RCC_AHBPeriph_DMA2
RCC_AHBPeriph_SRAM
RCC_AHBPeriph_FLITF
RCC_AHBPeriph_CRC
RCC_AHBPeriph_FSMC
RCC_AHBPeriph_SDIO
AHB启动函数:
RCC_AHBPeriphClockCmd (XX,ENABLE);
2、GPIO相关:
GPIO模式:
GPIO_Mode_AIN:模拟输入 GPIO_Mode_IN_FLOATING:浮空输入
GPIO_Mode_IPD:下拉输入 GPIO_Mode_IPU:上拉输入
GPIO_Mode_Out_OD:开漏输出 GPIO_Mode_Out_PP:推挽输出
GPIO_Mode_AF_OD:复用开漏输出 GPIO_Mode_AF_PP:复用推挽输出
GPIO速度:
GPIO_Speed_2MHz
GPIO_Speed_10MHz
GPIO_Speed_50MHz
GPIO引脚声明:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x; x:1~15或者all
GPIO初始化函数:
GPIO_Init(GPIOx, &GPIO_InitStructure); x:A~G
注:需要定义GPIO结构体变量,GPIO_InitTypeDef GPIO_InitStructure;
3、PWM相关
#include "timer.h"
#include "led.h"
#include "usart.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK战舰STM32开发板
//定时器 驱动代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/4
//版本:V1.1
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
//********************************************************************************
//V1.1 20120904
//1,增加TIM3_PWM_Init函数。
//2,增加LED0_PWM_VAL宏定义,控制TIM3_CH2脉宽
//////////////////////////////////////////////////////////////////////////////////
//通用定时器3中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
TIM_Cmd(TIM3, ENABLE); //使能TIMx外设
}
//定时器3中断服务程序
void TIM3_IRQHandler(void) //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源
LED1=!LED1;
}
}
//TIM4 PWM部分初始化
//PWM输出初始化 PB6 没有映射
//arr:自动重装值
//psc:时钟预分频数
void TIM4_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能定时器4时钟
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); //使能GPIO外设和AFIO复用功能模块时钟
//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM2, ENABLE); //Timer2部分重映射 TIM4_CH1->PB6 没有映射
//设置该引脚为复用输出功能,输出TIM4 CH1的PWM脉冲波形 GPIOB.6 没有映射 重映射的端口remap
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //TIM_CH1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO PB.6
//GPIO_SetBits(GPIOB,GPIO_Pin_6); //PB.6 输出高
//初始化TIM4
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
//初始化TIM2 Channel2 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高TIM_OCPolarity_High 接高电平极性为高 接低电平输出极性为低TIM_OCPolarity_Low
TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM4 CH1 TIM_OC1PreloadConfig
// CH1的PWM脉冲波形
TIM_CtrlPWMOutputs(TIM4,ENABLE); //⑤MOE 主输出使能 非高级定时器可省略
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM4在CCR1上的预装载寄存器 TIM4 CH1
TIM_ARRPreloadConfig(TIM4, ENABLE); //使能 TIMx 在 ARR 上的预装载寄存器 非高级定时器可省略
TIM_Cmd(TIM4, ENABLE); //使能TIM4
}
//TIM3 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM3_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射 TIM3_CH2->PB5 PC7
//设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形 GPIOB.5 重映射的端口remap
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
//设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形 GPIOC.7 重映射的端口remap
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM_CH2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO
//初始化TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
//初始化TIM3 Channel2 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器
TIM_Cmd(TIM3, ENABLE); //使能TIM3
}
//TIM2 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM2_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能定时器2时钟
上一篇:STM32 多个定时器 多路PWM配置
下一篇:STM32八路ADC采用DMA方式
推荐阅读
史海拾趣
Gems公司的首次商业成功源自一款专为小型造船业设计的舱底开关。这款产品的推出迅速得到了船舶和工业界的认可,不仅为公司带来了可观的收入,也奠定了Gems在传感器市场的地位。随着产品的广泛应用,Gems的员工数量和设施规模不断扩大,厂房从最初的6,500平方英尺扩展至位于美国康涅狄格州普莱恩维尔市的60,000平方英尺,为公司后续的发展提供了坚实的基础。
1955年,Gems Sensors & Controls公司的创始人Edward H. Moore在地下室中开始了他的创新之旅,成功研发出了第一台液位指示器。这一发明不仅为日后的公司奠定了基础,也标志着Moore在传感器技术领域的初步探索。1959年,他获得了该技术的专利,这一成果迅速吸引了业界的关注,为Gems公司的诞生铺平了道路。
随着市场需求的不断增长,Aplus Integrated Circuits公司决定扩大生产规模。公司在原有生产线的基础上,增加了多条先进的生产线,并引进了自动化生产设备,提高了生产效率。同时,公司还加强了质量管理,确保产品质量的稳定性和可靠性。这些举措使得公司的产能得到了大幅提升,为公司的持续发展提供了有力保障。
这五个故事展示了Aplus Integrated Circuits公司在电子行业中的发展历程和成就,从创业初期的技术突破到与国际市场的接轨,再到应对行业变革的挑战、加强产学研合作以及扩大生产规模,每一步都体现了公司的努力和坚持。
COMPEX公司深知客户需求的重要性,因此在生产过程中始终坚持灵活多变的原则。无论是小批量生产还是大规模定制,公司都能迅速调整生产线,满足客户的多样化需求。这种高度的生产灵活性,使得COMPEX在应对市场变化时能够迅速作出反应,抢占先机。
EEMB集团一直非常重视企业文化和团队建设。公司注重培养员工的创新意识和团队精神,为员工提供了良好的工作环境和发展机会。同时,公司也积极履行社会责任,关注环保和公益事业,为社会做出了积极贡献。这些举措不仅增强了公司的凝聚力和向心力,也为公司的可持续发展奠定了坚实基础。
请注意,以上故事是基于公开信息和一般情况下的假设而编写的,可能与EEMB Co Ltd公司的实际发展情况存在差异。
EEMB集团一直非常重视企业文化和团队建设。公司注重培养员工的创新意识和团队精神,为员工提供了良好的工作环境和发展机会。同时,公司也积极履行社会责任,关注环保和公益事业,为社会做出了积极贡献。这些举措不仅增强了公司的凝聚力和向心力,也为公司的可持续发展奠定了坚实基础。
请注意,以上故事是基于公开信息和一般情况下的假设而编写的,可能与EEMB Co Ltd公司的实际发展情况存在差异。
[]偶看到这篇分析,感觉不错,希望分享[Y]在半导体行业有工作经验的人对半导体产业的周期性波动特点不会陌生,尽管人们对 刚刚经历了2001年坐滑梯的感觉还心存余悸,但从政府到公司甚至个人职业生涯的选 择,人们对半导体产业的热情丝毫未减,期待着寒冬 ...… 查看全部问答∨ |
|
小弟在做一个试验,就是从单片机内部引脚产生一个占空比可调 频率可调的方波,然后进入AD,AD转换后在通过本身单片机实现在液晶显示转换结果, 现在我是分别做的这两部分:1.从外部输入一个方波信号,能实时液晶显示转换结果   ...… 查看全部问答∨ |
我使用easyarm8962做了一个使用蜂鸣器奏乐的实验。我用的下面的方法来使蜂鸣器发出特定频率的声音,蜂鸣器发出了声音,但却没有声调的变化(我已经定义好了一个乐谱,音符就是用不同的频率表示): // 蜂鸣器发出指定频率的声音 //&nb ...… 查看全部问答∨ |
请问各位: 以前都是用89c51单片机,c8051f06X单片机我刚开始学,很多问题不大明白,我想用DMA直接将数据送到外部XARM,而且是多通道的,总共有36个通道,但是现在ADC初始化和DMA初始化部分我比较混乱.有用过的大侠请给我讲下,要是有程序片段那就更好了 ...… 查看全部问答∨ |
据IHS公司的消费与移动MEMS市场研究报告,微机电系统(MEMS)市场中最大和最有活力的领域是消费与移动器件,通过积极开拓智能手机和平板应用,2011年MEMS市场将再度实现创纪录的增长率。 2011年消费与移动MEMS营业收入将达到22.5亿美元,取得迄 ...… 查看全部问答∨ |
电源设计一直是工程师面对的一个难题,随着全球节能环保意识的提升,设计简捷、高效、轻巧的绿色电源成为工程师的首要任务,为了帮助工程师解决这方面的难题,现在特别隆重推出大量实用资料供工程师朋友下载,目前推出的一本电子书叫做《电源开关设 ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- NI白皮书下载《如何克服复杂待测设备的生产测试挑战》
- 你评论,我送礼!《玩转TI MSP430 Launchpad》TI社区与EEWORLD联合首发!
- 更直观的了解5G?观看罗德与施瓦茨主题演讲,填问卷赢好礼!
- 1月22日下午14:00Mouser携手Maxim邀您观看有奖直播:深入浅出可穿戴健康监测
- 安世半导体新能源应用探索站,闯关赢好礼!
- 直播已结束|安世新一代高效的氮化镓(GaN)电源设计方案
- 读PI 汽车电子参考设计,赢京东卡!
- 安全在任何时候都是第一要素,你的嵌入式设计也是!诚邀参加英飞凌 OPTIGA™ Trust M 安全防御大揭秘!
- 初夏TI电池管理与您邀约:晒样片订单 抢楼赢礼!
- STM32F413 Nucle-144驾到,要测评速速来!