stm8s的SPI的时钟设置为8M,MOSI如何调整频率(目前为200K)

2019-12-26 18:51发布

本帖最后由 tiantang46800 于 2017-8-8 12:15 编辑

1、使用stm8s103驱动spi来控制ws2811的三 {MOD}led灯
2、代码调节了spi的时钟 为8M,示波器测试了
3、MOSI发送的频率只能调节到200K,每次发送8位数据,按照计算8M/8位=1M的频率吧,,还是哪里设置错了?如何提高


void spi_master_initialize(SPI_BaudRatePrescaler_TypeDef SPI_BaudRatePrescaler_X)
{
        /* Enable SPI clock */
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI,ENABLE);

        /* Set the MOSI,MISO and SCK at high level */
        GPIO_ExternalPullUpConfig(GPIOC, (GPIO_Pin_TypeDef)(GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7), ENABLE);

        /* Initialize SPI mode master 0 */
        SPI_Init( SPI_FIRSTBIT_MSB,
                        SPI_BaudRatePrescaler_X,
                        SPI_MODE_MASTER,
                        SPI_CLOCKPOLARITY_LOW,
                        SPI_CLOCKPHASE_1EDGE,
                        SPI_DATADIRECTION_1LINE_TX,
                        SPI_NSS_SOFT, 0x07);

        /* SD_SPI enable */
        SPI_Cmd( ENABLE);
}
以下是main函数:
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
spi_master_initialize(SPI_BAUDRATEPRESCALER_2); //上面2行配置完成后spi的clk是8M   
        for(jj=0;jj<8;jj++)
        {
          for(j=0;j<24;j++)
          {
            
             while((!SPI_GetFlagStatus(SPI_FLAG_TXE))&& (--time_out));
              if(!time_out) return ;
              SPI_SendData(0xf);//MOSI接ws2811的DI脚,示波器测试发送速度为200k,如何提高它的速度????????
          }
        }
12条回答
wx85105157
1楼 · 2019-12-27 18:01.采纳回答
是的,实测用12M晶振能点亮。发送01110001B就能点。
18161319737
2楼-- · 2019-12-27 21:36
你必须要DMA,如果没有DMA,就用大BUF,估算好时间发送
tiantang46800
3楼-- · 2019-12-28 01:48
kebaojun305 发表于 2017-8-9 09:53
请问 楼主 你发的是什么数据???

发送三 {MOD}led的数据,一共24位rgb,,,每一位颜 {MOD}使用一个8位MOSI发送。
kebaojun305
4楼-- · 2019-12-28 03:20
确实  楼主的要求 只能用dma来提高spi的效率。
jingmeidz
5楼-- · 2019-12-28 07:12
 精彩回答 2  元偷偷看……
tiantang46800
6楼-- · 2019-12-28 12:07
jingmeidz 发表于 2017-8-10 10:05
解决了吗?用IO口模拟可能更快

没有解决,使用pwm了,还在调试

一周热门 更多>