-
ST应该放点裸片到市场。
裸片具有先天的低成本优势和保密优势。
而且也不会被楼主抱怨,因为裸片就没有脚需要焊接,呵呵
-
应该是时序的问题吧?我也遇到了,但是没有你的运气好,按STM32固件库的sFlash demo改也未奏效。
后来分析是读写时钟边沿不同产生的时序问题。单步调试正常是因为把操作时序人为拉长了,实际效果等于对齐了TXE和RXNE的操作。如果我的分析正确,你的代码很有可能是碰巧对了,一旦程序运行时序变化,还有可能出错。
下面是摘录的库内demo代码
define sFLASH_CS_LOW() GPIO_ResetBits(sFLASH_CS_GPIO_PORT, sFLASH_CS_PIN)
#define sFLASH_CS_HIGH() GPIO_SetBits(sFLASH_CS_GPIO_PORT, sFLASH_CS_PIN)
/**
* @brief Sends a byte through the SPI interface and return the byte received
* from the SPI bus.
* @param byte: byte to send.
* @retval The value of the received byte.
*/
uint8_t sFLASH_SendByte(uint8_t byte)
{
/*!< Loop while DR register in not emplty */
while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_TXE) == RESET);
/*!< Send byte through the SPI1 peripheral */
SPI_I2S_SendData(sFLASH_SPI, byte);
/*!< Wait to receive a byte */
while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_RXNE) == RESET);
/*!< Return the byte read from the SPI bus */
return SPI_I2S_ReceiveData(sFLASH_SPI);
}
/**
* @brief Reads a block of data from the FLASH.
* @param pBuffer: pointer to the buffer that receives the data read from the FLASH.
* @param ReadAddr: FLASH's internal address to read from.
* @param NumByteToRead: number of bytes to read from the FLASH.
* @retval None
*/
void sFLASH_ReadBuffer(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead)
{
/*!< Select the FLASH: Chip Select low */
sFLASH_CS_LOW();
/*!< Send "Read from Memory " instruction */
sFLASH_SendByte(sFLASH_CMD_READ);
/*!< Send ReadAddr high nibble address byte to read from */
sFLASH_SendByte((ReadAddr & 0xFF0000) >> 16);
/*!< Send ReadAddr medium nibble address byte to read from */
sFLASH_SendByte((ReadAddr& 0xFF00) >> 8);
/*!< Send ReadAddr low nibble address byte to read from */
sFLASH_SendByte(ReadAddr & 0xFF);
while (NumByteToRead--) /*!< while there is data to be read */
{
/*!< Read a byte from the FLASH */
*pBuffer = sFLASH_SendByte(sFLASH_DUMMY_BYTE);
/*!< Point to the next location where the byte read will be saved */
pBuffer++;
}
/*!< Deselect the FLASH: Chip Select high */
sFLASH_CS_HIGH();
}
-
我设置的缓冲区大小为8个字节,对于18个字节的设备描述符需要有三次的IN分组事物吧?
可是我只检测到一次,问题就出在了这里,是怎么回事?
关于STAT_RX,STAT_TX的设置是如何控制的?
之前的困惑是没有弄清楚这两个不可以直接写入,而只能翻转。
现在知道了用^可以简单的实现写入某个想要的值。
但是看参考手册上说的不是很明白,依然困惑,恳请详解。
我先说说,看哪里不对了?
1.进入中断后先把他俩都设置成NAK,让主机等着。
2.处理完主机发过来的请求后更改为VALID,等待主机的请求。
是这样吗?有错误或者疏漏的地方还请指出~
-
首先,接入的磁盘在PC端显示的形式有两种:1,本地磁盘;2,可移动磁盘。
通常移动硬盘会显示成本地磁盘,U盘会显示成可移动磁盘。在我的电脑界面上按类型显示的时候会有所区分。
而这个本地磁盘和可移动磁盘在USB MASS SOTRAGE枚举的时候是由device端告诉PC的,也就是说移动硬盘和U盘会告诉PC是哪种设备,具体你可以看下USB MASS STORAGE协议。
-
建议楼主去好好的复习一下ARM汇编吧,
-
适用于CC1100E的完整无线网络协议,并且开源的。只有zigbee。建议你去tinyos的官网看看tinyos是否已经支持了你的处理器。如果支持,你会比较省事,不支持,你就惨了,去移植zigbee协议栈的C代码吧。
-
老实讲,我还是没看明白楼主你现况,你可以就你如何用中断方式和FLASH通信,详细说说流程,好让大家都理解下你究竟是什么思路。。。
-
果然是D+没有使能。。。
-
引用 2 楼 sikinzen 的回复:
设备驱动是属于内核部分的,它提供了一些接口。应用程序通过调用这些接口来 做工作:初始化设备、拍照、读取图像数据,等
其实我就是想问这些接口是如何获得的,是通过系统API得到的么,很多程序都是什么系统驱动号得到的,但是不明白具体是怎么获得系统驱动号如何定位系统驱动的?
Windows下设备的驱动是以什么形式存储在系统中啊?
-
5个汉字,加入说是8*12的
需要8*12*5=480个LED灯,还得组矩阵,很麻烦
所以最好找LED模块,华强那能找到
-
每个房间要有的话用GPRS的业务费用恐怕会很高。如果数据量不大可以考虑zigbee无线组网,多跳的方式实现远程通信。数据量大的话可能就不行了。如果数据量大,一次性投资的话可以考虑假设wifi网络。
-
下好了 还没装..
-
买个转IDE的板吧,才几块钱,要不就自己接一下,不用元件连通了就行
-
情况不明,隔皮猜瓜一下:
1.你在这里置低了却在未知的地方置高了?
2.引脚有没有特殊设置的地方?
3.有没有上拉,或者外围电路不能使它置低。这种情况不稀罕。
-
按下去的时候是通过定时器产生中断来采样的
2440 的ADC touchpanel 驱动,BSP里本来就有提供的呀
-
CS = Computer Science
EE = Electronic Engineering
北航出版社出了不少嵌入式的书,包括我们导师的也是拿到北航去出,不过不知道科研能力怎么样。
说到底,嵌入式是一个实践大于理论的东西,理论上都没有什么可以讲的地方,讲Linux移植?讲bootloader?讲体系结构?都是讲烂掉的东西,发到电脑编程技巧与维护这样的杂志都未必有人理。
-
按定时器设置计算出实际波特率,波特率误差不得大于3%
-
你的中断处理函数完了以后得再清一下标志位才行。
-
不会吧!不应该那么慢,你到别的计算机上试试,去xp系统试试
-
不怕您笑话,俺还没有玩过这个工具,但根据我以前用这个工具做ST7的项目经验,Cosmic编译后不能产生HEX文件(S19是与HEX相同功能的问题,只是格式不一样),但能够产生BIN文件,需要在哪里设置一下,具体记不清了。
南京站研讨会的主讲人是这方面的专家,到时候您可以当面向他提问。