WS2812是个在国外开源网站上很流行的自带控制器的三色灯,在Sparkfun和Adafruit上有很多这个灯做的阵列,可以实现很酷炫的效果。这次准备用12个2812做个灯圈用来作交互,用
WS2812是个在国外开源网站上很流行的自带控制器的三色灯,在Sparkfun和Adafruit上有很多这个灯做的阵列,可以实现很酷炫的效果。这次准备用12个2812做个灯圈用来作交互,用一种单线通讯协议,用高低电平脉冲宽度来区分0和1,可能我孤陋寡闻,反正是没在别的地方见过,网上找了找STM32上一般有两种实现方式,一种是靠SPI来模拟,一种是DMA。
原理简单来说就是靠1的多少来实现不同的脉冲宽度,用一个byte的数据来实现一个0或者1。因为脉冲宽度有严格的时间限制,所以SPI的频率也得控制在一个区间内。这样用是能用,但是坑也不少。1.得牺牲一部分主频,配了半天的始终prescaler,最后把主频从180降到了144才得到了需要的spi频率2.它依靠一定时间长度的低电平来区分frame,但是spi的idel是高电平,得在frame前后加入0来实现reset。
1、怎么使stm32推挽输出引脚开始就是高电平GPIO_SetBits(GPIOE,GPIO_Pin_2);//先输出高电平GPIO_InitStru.GPIO_PinGPIO_Pin_2;GPIO_InitStru.GPIO_SpeedGPIO_Speed_50MHz;GPIO_InitStru.GPIO_ModeGPIO_Mode_Out_PP;GPIO_Init(GPIOE,
你理解错了。stm32引脚输出不是一定要以固定频率输出(如果你需要可以通过编程实现),而是若想正确使用stm32引脚功能(不限于输出,包括输入)一定开启gpio时钟,这是外设驱动时钟,是硬件要求的,根据输入输出信号变化的快慢,这个时钟频率可以设置。所以,正确设置(这是比使用51单片机麻烦的地方)后,io管脚像51或其他单片机一样,可以一直保持低电平或高电平输出,直到程序对其状态进行改变。
2、stm32中空的I/O管脚是高电平还是低电平?STM32中空的I/O管脚是高电平还是低电平取决于具体情况。\x0d\x0a1、IO端口复位后处于浮空状态,也就是其电平状态由外围电路决定,\x0d\x0a2、STM32上电复位瞬间I/O口的电平状态默认是浮空输入,因此是高阻。做到低功耗,\x0d\x0a3、\x0d\x0aSTM32的IO管脚配置口默认为浮空输入,把选择权留给用户,这是一个很大的优势:一方面浮空输入确保不会出现用户不希望的默认电平(此时电平取决于用户的外围电路);另一方面降低了功耗,因为不管是上拉还是下拉都会有电流消耗。