今天要介绍的是自己在开发小车驱动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);