- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 STM32F072RBuC 通过 SPI2
接收和传输数据在具有以下配置的从属模式下:
CR1 = 0x0078
CR2 = 0x0700
AFRH = 0x55353500
MODER = 0xa2a0556a
寄存器APB1ENR
也已正确配置。
当前程序只检查RXNE
标志,从 DR
中读取接收到的数据并发送一个随机值写入 DR
.
我收到数据时的状态寄存器有如下值:
SR = 0x1403
主机正确发送数据,我检查了从机引脚的信号(时钟相位和极性在两侧相同,并且在通过 MOSI 发送 SCK 和数据之前清除 NSS 信号)。
我什至将引脚配置为输入,我知道我可以读取主机发送的任何数字信号。在当前配置下,slave 似乎收到了一些东西,因为 RXNE
主机发送数据时置位,但读取值始终为0x00。
我尝试了不同的配置(软件/硬件 NSS、不同的数据大小等),但我总是得到 0x00。此外,我阅读后发送的随机值 DR
不发送到输出。
这是我当前的函数,它被连续调用:
unsigned char spi_rx_slave(unsigned char spiPort, unsigned char *receiveBuffer)
{
uint8_t temp;
static unsigned long sr;
if (!spi_isOpen(spiPort))
{
sendDebug("%s() Error: spiPort not in use!\r\n",__func__);
return false;
}
if (spiDescriptor[spiPort]->powerdown == true)
{
sendDebug("%s() Error: spiPort in powerdown!\r\n",__func__);
return false;
}
/* wait till spi is not busy anymore */
while((spiDescriptor[spiPort]->spiBase->SR) & SPI_SR_BSY)
{
sendDebug("SPI is busy(1)\r\n");
vTaskDelay(2);
}
sendDebug("CR1 = 0x%04x, ", spiDescriptor[spiPort]->spiBase->CR1);
sendDebug("CR2 = 0x%04x, ", spiDescriptor[spiPort]->spiBase->CR2);
sendDebug("AFRH address = 0x%08x, AFRH value = %08x, ", (unsigned long*)(GPIOB_BASE+0x24), *(unsigned long*)(GPIOB_BASE+0x24));
sendDebug("MODER address = 0x%08x, MODER value = %08x\r\n", (unsigned long*)(GPIOB_BASE), *(unsigned long*)(GPIOB_BASE));
sr = spiDescriptor[spiPort]->spiBase->SR;
while(sr & SPI_SR_RXNE)
{
/* get RX byte */
temp = *(uint8_t *)&(spiDescriptor[spiPort]->spiBase->DR);
spiDescriptor[spiPort]->spiBase->DR = 0x53;
sendDebug("-------->DR address = 0x%08x, data received: 0x%02x\r\n", &spiDescriptor[spiPort]->spiBase->DR, temp);
sendDebug("SR = 0x%04x\r\n", sr);
vTaskDelay(1);
sr = spiDescriptor[spiPort]->spiBase->SR;
}
while((spiDescriptor[spiPort]->spiBase->SR) & SPI_SR_BSY)
{
sendDebug("SPI is busy(2)\r\n");
vTaskDelay(2);
}
return true;
}
我做错了什么?有什么我没有正确配置的吗?
提前致谢。问候,哈维尔
我切换到软件 NSS 并复制了我在网上找到的 STM32CubeMX 示例中的寄存器值。我不能将这些库用于该项目,但我希望有相同的行为。
新值是:
CR1 = 0x0278
这意味着
CR2 = 0x1700
这意味着
RXNE
如果 FIFO 级别大于或等于 1/4(8 位),则生成事件。AFRH = 0x55303500
MODER = 0xa8a1556a
这意味着
我仍然得到相同的结果,并且使用这些库的评估套件可以正常使用 SPI1
反而。因此,肯定还有另一个与寄存器值无关的问题。
可能有任何时钟问题,例如引脚需要一些时钟吗?
谢谢!
最佳答案
这个问题指出了一些错误,这些错误可以解释为什么没有观察到接收:
GPIO 配置指向一些错误的备用功能/模式:这个问题没有准确说明,但我认为
AFRH = 0x55303500
MODER = 0xa8a1556a
指的是 GPIOB(否则,它对 SPI2 没有意义)。这对应于以下引脚配置(见 Reference Manual ,秒。 8.4.1、8.4.10 和 Datasheet ,表 16):
PB15 - Alternate Function - AF5 = [INVALID]
PB14 - Alternate Function - AF5 = [I2C2_SDA]
PB13 - Alternate Function - AF3 = [TSC_G6_IO3]
PB12 - GP Input (reset state)
PB11 - Alternate Function - AF3 = [TIM_CH4]
PB10 - Alternate Function - AF5 = [SPI2_SCK / I2S2_CK]
PB09 - GP Input (reset state)
PB08 - GP Output
PB07 - Alternate Function - (unknown which, see register AFRL)
PB06 - GP Output
PB05 - Alternate Function - (unknown which, see register AFRL)
PB04 - GP Output
PB03 - GP Output
PB02 - Alternate Function - (unknown which, see register AFRL)
PB01 - Alternate Function - (unknown which, see register AFRL)
PB00 - Alternate Function - (unknown which, see register AFRL)
这显然不是软件需要做的。
解决方案:确保配置PB15=>AF0、PB14=>AF0、PB13=>AF0或PB10 =>AF0,取决于您的硬件。
为了避免这样做的错误,您应该遵循@P__J__ 的提示,并为分配给 MODER、AFRH 等的常量使用说话宏。使用 ST 提供的 HAL 库在 SO 用户中是一个真正有争议的话题,但是人们真的应该考虑至少使用像 stm32f072xb.h
这样的头文件和像 这样的宏>GPIO_AFRH_AFSEL15
。如果将所有配置寄存器值表示为此类宏的(按位)或,则更容易根据数据表重新检查配置,而著名的 rubber duck会直接知道不开心的开发者在说什么。
其他时钟激活可能会丢失:这个问题证实了
The register
APB1ENR
is also properly configured.
这是正确的(只要第 14 位已设置)。
此外,GPIOB 必须通电,即。例如,必须设置 RCC_AHBENR
的第 18 位。再看看 Reference Manual ,秒。 6.4.8 和 6.4.6。
调试期间 GPIO 引脚可能处于错误模式:
I even configured the pins as inputs and I know I could read any digital signal the master could send. With the current configuration it seems the slave receives something because the RXNE is set when the master sends data but the read value is always 0x00.
请注意,对于每个 GPIO 引脚,通过 MODER
寄存器选择一个独特的模式。如果将其设置为“输入”(0b00
),备用功能将断开连接并且无法使用外部信号。
关于STM32F072RB 在从机模式下不通过 SPI 接收/发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44676996/
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我刚刚开始使用 Arduino,对更多高级内容几乎一无所知。这看起来很简单。现在我是一个通常喜欢将两个设备集成在一起的人,所以我想知道我是否可以使用计算机的键盘或连接到 Arduino 板上的两个硬件
Hadoop上是否有支持 vector 机的实现? 我正在寻找使我能够训练然后在Hadoop之上测试SVM模型的代码。 最佳答案 有人正在使用BSP在Apache Hama之上进行实现,该实现基本上是
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我想用 Java 编写一个“智能监视器”,它会在它检测到即将出现的性能问题时发出警报。我的 Java 应用正在将结构化格式的数据写入日志文件: | | 因此,例如,如果我有一个执行时间为 812
我在 Cappuccino 中遇到这种错误 TypeError: Result of expression '_2b' [undefined] is not an object. TypeError:
我想编写一个简单的 bean 机程序。该程序将接受用户输入的球数和槽数,并计算每个球的路径。每个槽中的球数也将打印为直方图。 我尽力让代码保持简短和简洁,但我能做到的最好的长度是 112 行。当我运行
我正在开发一个 Plone 模板。目前我正在对模板实现搜索。模板上有一个表单提交到同一模板,即同一页面。 我需要启用页面的某些部分,即结果 DIV,仅当页面中的表单已提交时。我不确定如何检查页面是否已
我是机器学习的新手。我正在使用 opencv 开源库做一个项目。我的问题是我没有机器学习方面的经验。我从不同的图像中提取了特征并对其进行了评估,现在我想使用 SVM 对这些图像中的对象进行分类,但我不
我有一个来自自定义抽象对象的数据集和一个自定义距离函数。是否有任何好的 SVM 库允许我训练我的自定义对象(不是 2d 点)和我的自定义距离函数? 我在 this similar stackoverf
我正在尝试编写 SVM 或 KNN 程序来对文本文档进行分类。我掌握了两者的概念,但我希望看到一些很好的代码示例,它们专门演示了如何将文本/单词表示为 vector 。有人知道好的教程/文章/讲座/任
我想知道支持 vector 机 (SVM) 对于大型/超大型数据集(5-15M+ 行)具有非线性决策边界(例如高斯核)? 我知道两种特殊的方法:一方面,这个使用随机梯度下降等的调查: http://c
我试图在 Raspberry Pi 中使用 python 控制连续伺服(DF15RSMG),但连续伺服无法停止。代码如下: import RPi.GPIO as GPIO import time
我们在 .net 中有银行项目。在那个项目中我们需要实现存折打印。 - 存折背面会有磁条。 - 当客户将存折插入自助服务终端时,自助服务终端将生成 ISO 8583 信息。 - 为响应此消息,CBS(
我想使用 svm 分类器进行面部表情检测。我知道 opencv 有一个 svm api,但我不知道训练分类器的输入应该是什么。到现在看了很多论文,都是说人脸特征检测后训练分类器。 到目前为止我做了什么
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
为了学习 ArchLinux,我在 VirtualBox 机器上安装并使用了 ArchLinux。它运行完美。现在我在我的电脑上安装了 Docker(Windows 环境)。在安装 Docker 的过
我找不到很多相关信息,但是我知道可以通过命令提示符electron-packager .创建一个 Electron 应用。但是,可以通过 Node 快速路由在前端执行它吗? 所以我想做这样的事情: r
我正在使用 MS Visual Studio 2008、OpenCV、C++ 和 SVM 继续我的 OCR 项目。我生成了一个超过 2000 个机印字符样本的数据集。当我用线性核测试时,我总是得到 9
我通过UART接口(interface)(RX-TX,GND-GND)将伺服(TowerPro sg90)连接到32伺服 Controller (this one)。 卖家提供了如何连接和控制我的伺服
我是一名优秀的程序员,十分优秀!