pwm总结,驱动双电机,和配置,关键点在于通道,要理清楚思路步骤自然是得心应手了

今天要介绍的是自己在开发小车驱动pwm模块中遇到问题的总结,在穿插一些spi的知识
里面涉及的内容和一些:
从代码开始,第一是
在设置这个值之前,我们应当先把gpio口设置好,如果不涉及外设的话,我们可以不适用af 复用的功能,如果涉及输出的点平需要应用嵌套在我们gpio口上面的如:ustar 、tim、 这些片上外设我们需要使用复用输出,如果是输出高点平,那么我们可以是这样GPIO_AF_OUT_pp  复用推挽输出高点平,如果不涉及这些,我们就可以不用添加复用,
在输入和输出时我们应当去考虑IO口的配置,上拉和下拉,对应的高点平和低点平,不同的配置会影响不同的功能、
pwm:一个定时器应该有两个pwm,因为是定时器的功能,我们第一步对定时器初始化:
这里一共就是两个步骤:定时器基本配置初始化、二 定时器上面的pwm进行配置,
    开中断‘
       TIM_InternalClockConfig(TIM2);
    预分频
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//»ù±¾ÅäÖÃ
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;  默认工作
    TIM_TimeBaseInitStructure.TIM_Period = 100 - 1;        //ARR     
    TIM_TimeBaseInitStructure.TIM_Prescaler = 36 - 1;        //PSC
    TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;  //重装值
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
    
    TIM_OCInitTypeDef TIM_OCInitStructure;
    输出比较,
    TIM_OCStructInit(&TIM_OCInitStructure);//ÅäÖÃ0c±È½ÏÆ÷µÄÊä³ö¡£
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;    
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出比较这里是高点平
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出状态
    TIM_OCInitStructure.TIM_Pulse = 0;        //CCR
    
    //这里是通道,在tim通道中,每个gpio占tim的通道是不同的,如果是pa2口的话,我们实际使用的是tim的通道3,具体这个还是要看手册,同理,其他外设的gpio口是不一致的,还有冲印射功能,
    TIM_OC1Init(TIM2, &TIM_OCInitStructure);//虽然开启多个通道,但是只需要要一个结构体,
    TIM_OC2Init(TIM2, &TIM_OCInitStructure);//这里还要回到结构体的概念
  TIM_OC3Init(TIM2, &TIM_OCInitStructure);//虽然很多数据,但是要引用,我们用结构体来开启通道
  TIM_OC4Init(TIM2, &TIM_OCInitStructure);//配置参数就真的很方便了。

    
    TIM_Cmd(TIM2, ENABLE);

spi的初始化,函数在使用中很重要,很多时候在理解时速度还比较块,但是实际运用还是有一些欠缺,但是必须要懂,然后再去实际运用这些值,
spi  全双工 同步通信:misi miso  ss ssck   misi和miso分别是发送和接受,
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//主机模式
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//全双工,双通信,
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//数据大小:八字节
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//msb代表是高位先行,在数据传输是分为是高位或者低位先行,lsb则是低位先行
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;//预分频值,在不稳定的情况下,我们可以把这个值设置的大一些。
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;//默认
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;//从一开始检测,也就是单数监测
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//触发方式分为软件和硬件,soft和硬件
    SPI_InitStructure.SPI_CRCPolynomial = 7;//crc校验值,在很多的过程当中,如果遇到crc那么应该和校验是相关的。
    SPI_Init(SPI1, &SPI_InitStructure);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值