新手上路
- 积分
- 36
- 金钱
- 36
- 注册时间
- 2020-1-10
- 在线时间
- 7 小时
|
1金钱
本帖最后由 xred 于 2023-12-14 19:43 编辑
如题,学习移植下wx25qxx的driver, 总是不成功,哪位大佬指定一下?
对了,不能用DMA, 没有DMA. 也没有使用中断, 直接在循环里面判断的标识.不用中断和DMA, 这么写的话, 用什么姿势能正确读取?
W25QXX_result_t w25qxx_transmit(W25QXX_HandleTypeDef* w25qxx, uint8_t* buf, uint32_t len)
{
for (size_t i = 0; i < len; i++) {
LL_SPI_TransmitData8(SPI1, buf);
while (!LL_SPI_IsActiveFlag_TXE(SPI1)) { }
}
return W25QXX_Ok;
}
W25QXX_result_t w25qxx_receive(W25QXX_HandleTypeDef* w25qxx, uint8_t* buf, uint32_t len)
{
for (size_t i = 0; i < len; i++) {
while (!LL_SPI_IsActiveFlag_RXNE(SPI1)) {} // 卡死在这
buf = LL_SPI_ReceiveData8(SPI1);
}
return W25QXX_Ok;
}
初始化:
- static uint8_t MX_SPI1_Init(void)
- {
- LL_SPI_InitTypeDef SPI_InitStruct = { 0 };
- LL_GPIO_InitTypeDef GPIO_InitStruct = { 0 };
- LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1);
- LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
- /**SPI1 GPIO Configuration
- PA1 ------> SPI1_SCK
- PA2 ------> SPI1_MOSI
- */
- GPIO_InitStruct.Pin = LL_GPIO_PIN_1;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_DOWN;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
- LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- GPIO_InitStruct.Pin = LL_GPIO_PIN_2;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_DOWN;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
- LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- GPIO_InitStruct.Pin = LL_GPIO_PIN_6;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_DOWN;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
- LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
- SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
- SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
- SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW;
- SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE;
- SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
- SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2;
- SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;
- SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
- SPI_InitStruct.CRCPoly = 7;
- LL_SPI_Init(SPI1, &SPI_InitStruct);
- LL_SPI_SetStandard(SPI1, LL_SPI_PROTOCOL_MOTOROLA);
- LL_SPI_DisableNSSPulseMgt(SPI1);
- // LL_SPI_EnableNSSPulseMgt(SPI1);
- LL_SPI_SetRxFIFOThreshold(SPI1, LL_SPI_RX_FIFO_TH_QUARTER);
- // NVIC_SetPriority(SPI1_IRQn, 1);
- // NVIC_EnableIRQ(SPI1_IRQn);
- // LL_SPI_EnableIT_RXNE(SPI1);
- LL_SPI_Enable(SPI1);
- return 0;
- }
复制代码
|
|