初级会员

- 积分
- 96
- 金钱
- 96
- 注册时间
- 2014-5-2
- 在线时间
- 14 小时
|
5金钱
最近在搞一个WS2812B的LED灯,里面有一块内置芯片用于自己产生PWM。
单片机这边要做的事就是按一定的时序发送数据进一个DIN口。
我采用的是DMA输出到GPIO->ODR。
已经调试成功。
但后来发现程序里面有点问题,我把内存里面的数组通过DMA写进GPIO里,以16bit每个传输,按道理应该可以同时操控16个GPIO口,我接的是PB口,
也就是说我将一个十六bit的数组通过DMA写到GPIO来控制16个IO口的高低电平,从而控制16列灯。
但发现PB5,PB6,PB7,PB8,PB10输出完全不正常,实际上根本没有按照数据里面的数传递进GPIO。
而其他引脚则完全正常。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
我加了这几句是为了让JTAG,SWD引脚当普通IO口用。
我看了手册PB5,PB6,PB7,PB8,PB10默认功能就是普通的IO口,按道理来说跟复用引脚应该没有多大关系。
那为什么数组里面的数没有通过DMA在GPIO口上翻转呢。
求原子哥和各路大神指点一下。 |
|