小编ric*_*nle的帖子

如何在STM32中延迟一个时钟周期?

问题与主题一样简单。如何在STM32中延迟确切的一个时钟周期?如果控制器以168MHz运行,则一个时钟周期等于1 / 168MHz,即5.95ns吗?

assembly clock stm32 stm32ldiscovery

3
推荐指数
1
解决办法
1万
查看次数

stm32 DMA无法向SPI1 DR发送数据(不能使用DMA向SPI发送数据)

我正在尝试使用DMA将数据发送到SPI1.然后SPI1将控制DAC以进行电压更新.

使用的芯片是STM32F407.因此,相应的频道/流是:channel3/stream5,如参考手册中所示.但是,当DMA使能时,SPI1-> DR中不显示任何数据,示波器中没有显示结果.

当SPI1-> DR由软件写入时,SPI工作正常.谁能帮忙看看发生了什么?代码如下:

uint16_t DACData[1]; 
void InitDMA(void)
{
    DMA_InitTypeDef DMA_InitStructure;
    DMA_Cmd(DMA2_Stream2, DISABLE);
    while (DMA2_Stream2->CR & DMA_SxCR_EN);
    //SPI1 Tx DMA
    DMA_DeInit(DMA2_Stream5);
    DMA_StructInit(&DMA_InitStructure);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); //Init DMA clock
    DMA_InitStructure.DMA_Channel = DMA_Channel_3;//SPI1 Tx 
    DMA_InitStructure.DMA_PeripheralBaseAddr  = (uint32_t)&(SPI1->DR); //Set the SPI1 Tx
    DMA_InitStructure.DMA_Memory0BaseAddr  = (uint32_t)&DACData;       //Set the memory location
    DMA_InitStructure.DMA_DIR  = DMA_DIR_MemoryToPeripheral;           //
    DMA_InitStructure.DMA_BufferSize  = 1;            //Define the number of bytes to send
    DMA_InitStructure.DMA_PeripheralInc  = DMA_PeripheralInc_Disable;             
    DMA_InitStructure.DMA_MemoryInc  = DMA_MemoryInc_Disable;            
    DMA_InitStructure.DMA_PeripheralDataSize  = DMA_PeripheralDataSize_HalfWord;    
    DMA_InitStructure.DMA_MemoryDataSize  = DMA_PeripheralDataSize_HalfWord;        
    DMA_InitStructure.DMA_Mode  = DMA_Mode_Normal;               //Normal mode (not circular)
    DMA_InitStructure.DMA_Priority …
Run Code Online (Sandbox Code Playgroud)

spi stm32 dma stm32f4discovery

3
推荐指数
1
解决办法
5977
查看次数

VHDL中的FSM机器,每个州执行某些操作

我有一个有五种状态的FSM(s1,s2,s3,s4,s5).

但是,对于每个州,应该进行一系列操作.例如,在s2中,计数器应从1到10计数.

我的问题出现了:FSM怎么知道"我应该从s2改为s3"?或者以另一种方式说话,s2如何通知FSM"我已经完成",并且应该根据LookUpTable启动新状态?

vhdl fsm

2
推荐指数
1
解决办法
2283
查看次数

STM32 DMA(并发流,FIFO,突发模式,双缓冲)

stm32F4系列的DMA有一些高级功能,我可以在这里要求澄清吗?

  • 并发流:两个流可以同时传输数据吗?由于允许一个字节传输.如果总线宽度为32位,则可以进行4次并发传输.顺便说一下,STM32的AHB总线宽度是多少?

  • FIFO模式:如果无法进行并发传输,我猜这里可以使用FIFO.FIFO将有助于将数据从低速外设等待到DMA而不占用AHB总线.当准备好一定数量的数据时,数据块将一起发送到内存.我的理解是否正确?

四字深度每个流32个先进先出存储缓冲器(FIFO)

那是什么意思?FIFO中可以存储多少数据?4或4*32?

  • 突发模式:实际突发模式有什么作用?它在数据表中说可以传输65535个数据.65535与突发模式之间有什么关系?

  • 双缓冲模式:

双缓冲区类型事务:使用两个
内存指针进行内存的双缓冲区传输(当DMA
从/向缓冲区读/写时,应用程序可以向/从另一个
缓冲区写入/读取).-----来自STM32F4的参考手册

我的问题是:在DMA传输期间,AHB总线不适用于Cortex M4,应用程序如何从其他缓冲区读取?

c stm32 dma stm32f4discovery

2
推荐指数
1
解决办法
6883
查看次数

标签 统计

stm32 ×3

dma ×2

stm32f4discovery ×2

assembly ×1

c ×1

clock ×1

fsm ×1

spi ×1

stm32ldiscovery ×1

vhdl ×1