STM32F103+HAL+PWM+DMA+WS2812
来源:互联网 发布:mac炉石记牌器 编辑:程序博客网 时间:2024/06/05 18:50
如题:用HAL库,通过stm32f103r8的PWM的DMA模式控制WS2812
硬件使用的是TIM3的CHANNEL1硬件配置如下:
时钟为常规时钟配置
定时器3产生1.25us周期需要的arr为89(计算略)
DMA配置如下:
几个需要注意的地方,
1.DMA
1.1DMA方向 Memory To Peripheral (默认为Peripheral To Memory)
1.2DMA传输位宽 Half Word
2.定义数组
2.1一定要定位为16bit,
3.定义高低位
#define BIT_1 61u //1比较值为61 850us
#define BIT_0 28u //0比较值为28 400us
4. //发送函数
void TM7812_show(void)
{
uint8_t i, j;
for(i = 0; i < PIXEL_MAX; i++)
{
for(j = 0; j < 8; j++)
{
frame.data[24 * i + j] = (rBuffer[i] & (0x80 >> j)) ? BIT_1 : BIT_0;//将高低位扩展到16bit
frame.data[24 * i + j + 8] = (gBuffer[i] & (0x80 >> j)) ? BIT_1 : BIT_0;
frame.data[24 * i + j + 16] = (bBuffer[i] & (0x80 >> j)) ? BIT_1 : BIT_0;
}
}
HAL_TIM_PWM_Start_DMA(&htim3, TIM_CHANNEL_1, (uint32_t *)&frame, 3 + 24 * PIXEL_MAX + 1); //虽然传的是16bit但是要先转为32bit指针,
//貌似是函数要求为32位无符号指针,但实际传输时,因为之前定义的为half word,所以还是16bit传输;
//不对还请指正
}
5.PWM的DMA完成中断回调函数
因为HAL库自身清楚DMA标志的时候并没有停止PWM所以需要手动停止
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
HAL_TIM_PWM_Stop(&htim3,TIM_CHANNEL_1);
}
- STM32F103+HAL+PWM+DMA+WS2812
- stm32f103 pwm模式配置总结
- STM32F4 HAL库DMA学习
- STM32F103定时器输出PWM波控制直流电机
- STM32F103学习笔记 (八) PWM输出
- stm32f103使用TIM1和TIM2输出PWM
- 【STM32F103攻城笔记】PWM功能实战
- STM32F103 USART DMA收发不定长数据
- 【STM32F103】DMA学习笔记(陆续添加)
- stm32f103 I2C DMA方式使用失败
- cube HAL库 F7 配置pwm流程
- STM32F103的11个定时器详解 高级定时器pwm
- NuttX 入门笔记5 STM32F103C8T6(STM32f103-minimum) PWM测试
- STM32F103的W25Q64的DMA高效数据访问实现
- STM32F103 UART4 DMA接收 终于调试成功,分享一下
- STM32F103 定时器+ADC+DMA中断+双缓存+实现数据采集
- 【stm32f103】DMA应用memory to memory(寄存器版)
- STM32的PWM输入模式设置并用DMA接收数据
- 学习前端过程
- CHAR Learn冠军方案
- ALSA lib dlmisc.c (snd1_dlobj_cache_get) symbol _snd_pcm_plug_open is not defined inside [builtin]
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 A题
- 欢迎使用CSDN-markdown编辑器
- STM32F103+HAL+PWM+DMA+WS2812
- 2D CNN
- Java Enumeration
- jsp中作用域知识点小结
- 315. Count of Smaller Numbers After Self
- web超链接方式
- Hibernate级联操作
- 35. Search Insert Position
- JVM SafePoint安全点分析