两个ARM间的SPI通信怎么实现?ARM型号均为STM32F429ZIT。 5C

发送时,采取的函数为HAL_SPI_Transmit_IT();
接收时,由于不知道对方发过来的报文长度,
就不知道用什么函数。厂家提供的软件包里面的receive函数都需要
指定size长度。
下面的代码中,我在最开始开启SPI_IT_RXNE中断使能。
通过中断函数和数据处理函数来解析报文。并把报文上传网络服务器。
但是ARM SPI接收不到数据。不知道为啥?
本代码为SPI主机的。
/* SPI5 init function */
void MX_SPI5_Init(void)
{

hspi5.Instance = SPI5;
hspi5.Init.Mode = SPI_MODE_MASTER;
hspi5.Init.Direction = SPI_DIRECTION_2LINES;
hspi5.Init.DataSize = SPI_DATASIZE_8BIT;
hspi5.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi5.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi5.Init.NSS = SPI_NSS_SOFT;
hspi5.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
hspi5.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi5.Init.TIMode = SPI_TIMODE_DISABLED;
hspi5.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
HAL_SPI_Init(&hspi5);

}

/**

  • @brief Initializes the SPI according to the specified parameters
  • in the SPI_InitTypeDef and create the associated handle.
  • @param hspi: pointer to a SPI_HandleTypeDef structure that contains
  • the configuration information for SPI module.
  • @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) { ..... HAL_SPI_MspInit(hspi); ...... }

void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{

GPIO_InitTypeDef GPIO_InitStruct;
if(hspi->Instance==SPI4)
{
/* Peripheral clock enable */
__SPI4_CLK_ENABLE();

/**SPI4 GPIO Configuration 
PE2    ------> SPI4_SCK
PE5    ------> SPI4_MISO
PE6    ------> SPI4_MOSI
*/
GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_5|GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI4;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

}

if(hspi->Instance==SPI5)
{
/* Peripheral clock enable /
__SPI5_CLK_ENABLE();
/
*SPI5 GPIO Configuration
PF7 ------> SPI5_SCK
PF8 ------> SPI5_MISO
PF9 ------> SPI5_MOSI
*/
GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI5;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

}

}

main()
{
MX_SPI5_Init();
__HAL_SPI_ENABLE_IT(&hspi5, SPI_IT_RXNE);
while (1)
{
SPI5_Master_Rx(); //读取从机发过来的数据。
}
}

typedef uint8_t u8 ;
typedef uint16_t u16 ;
typedef uint32_t u32 ;
u8 hmosi[50]={0};
u8 mosi1[50]={0};
u8 phmosi[50]={0};
u32 imosi=0;
u32 spi5_rx_len;
u32 ic=0;
#define comsize 8

extern u16 tSession;
u32 udata_len_spi;
extern u16 ports[comsize+1];
extern u32 uTimeLst;

extern SPI_HandleTypeDef hspi5;
void SPI5_IRQHandler(void)
{
if(__HAL_SPI_GET_FLAG(&hspi5, SPI_FLAG_RXNE) == SET)
{
hmosi[imosi++]=(uint8_t)(hspi5.Instance->DR);

}             

}

void SPI5_Master_Rx(void)
{
//for(;imosi>=(ic+7);ic++)
for(;imosi>=(ic+5);ic++)
{
if((0x2e==hmosi[ic])&&(0x17==hmosi[ic+1])&&(0x0==hmosi[ic+2]))
{
spi5_rx_len=hmosi[ic+6];
udata_len_spi = spi5_rx_len+1;
memset(phmosi,0x00,udata_len_spi);
phmosi[5]=hmosi[ic+5];

phmosi[6]=spi5_rx_len-7;
memcpy(phmosi+7,hmosi+ic+7,spi5_rx_len-7);
memcpy(mosi1,hmosi+ic,50-ic);
memcpy(hmosi,mosi1,50-ic);
imosi=imosi-ic;
ic=0;
//**************************
tSession++;
phmosi[0]=0x2e;
phmosi[1]=0x17;
phmosi[2]=0x00;

phmosi[3]=tSession;
phmosi[4]=(tSession>>8);

//memcpy(udata+7,tx1_buf,rx1cnt);
phmosi[udata_len_spi-1] = crc(phmosi,udata_len_spi-1,1);
com2net(ports[0],udata_len_spi,phmosi);
uTimeLst=HAL_GetTick();
}
}
}

2个回答

注意需要一个作为HOST一个作为SLAVE

我们在调试的时候好像也出现了问题,需要改地址好像是

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
arm与FPGA间用SPI通信方式传输数据
arm做主机与FPGA间用SPI通信方式传输数据,FPGA除了要接收arm端发送的数据外, 还需要随时处理一些外部设备状态信息,这一过程是随机突发的,然后再将数据回发至arm端进行处理并显示在相应界面。那么完成这一过程是否要一直保持SPI通信的状态,需要怎么做,求大神给个方向。
arm​9做主控板与stm32做从机,通信用I2C,如何实现stm32从机模式
小弟现在在做STM32 i2c作为从机模式,想使用arm​9做主控板与stm32做从机,通信用I2C,搞的头大,现有的都是主机模式,一直浏览各大网站,发现关于STM32 I2C作为从机的例子少之又少,不知道如何下手,请问哪位大神可以指点一下,有代码例程,感激不尽!!​!
STM32F407 SPI的SPI1->DR寄存器值不变
![图片说明](https://img-ask.csdn.net/upload/201504/18/1429340098_960264.jpg) 如图寄存器状态,不知道怎么回事,网上也搜不到类似的问题>.<;; 理论上,执行 SPIx->DR = Data;后SPI的SR寄存器应该变为SPIx->SR=0x0000(我的所有脚都悬空),但是结果却是SPIx->SR=0x0003,而且DR的值不变任然是SPIx->DR=0x0000。 不知道怎么回事啊,小弟接触arm没多久,谢谢啦! 下面是部分代码,SPI初始化和main函数。 ``` //main.c SPI2Init(); STM_EVAL_LEDInit(LED4); STM_EVAL_LEDInit(LED5); u32 temp=0; STM_EVAL_LEDToggle(LED4); while(!SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)); SPI_I2S_SendData(SPI1,0x11); temp=0xfffff; while(temp) {temp--;} temp=0; //SPI1Init.c void SPI1Init(void){ GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; // Enable the SPI periph RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); // Enable SCK, MOSI and MISO GPIO clocks RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); // Enable CS GPIO clock RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOB,GPIO_PinSource4,GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOB,GPIO_PinSource5,GPIO_AF_SPI1); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_Init(GPIOB,&GPIO_InitStructure); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStructure); SPI_Cmd(SPI1, ENABLE); //Configure GPIO PIN for Lis Chip select GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_Init(GPIOA,&GPIO_InitStructure); //Deselect : Chip Select high GPIO_SetBits(GPIOA, GPIO_Pin_15); } ```
FPGA做从机与arm进行SPI通信,接收数据错位
FPGA做从机与arm spi通信 ,fpga可以正确接收arm发过来的数据,但fpga给arm回发的数据,arm接收总是错位,比如发0x01 arm接收到为0x80,发0x81,arm接收到0xC0,总是右移动了一位,这问题困扰了好几天了,求大神解答,在线等!
arm与FPGA通信如何定义SPI通信的数据解析协议
用arm自带的spi驱动与FPGA进行通信,arm端做主机每次发送一字节8位,需要往FPGA里发送一些参数和数据, ,其中发送的数据内容在0x00到0xFF都会出现,求解如何定义协议进行解析才能把参数跟数据分开来。求大神解答
如何用I2C实现stm32与arm之间通讯
stm32通过传感器采集数据,经由I2C通讯传输给arm板子上,实时在arm板子上的lcd屏上显示传感器采集到的数据
如何用 面包板 来扩展 ARM开发板(STM32F767) ?
我先来描述一下我的问题。(因为我是一个小白,所以我的问题本身可能就不成立) () 我暑假留校做比赛,课题是ARM开发,使用的是STM32F767,由于板子上的3v3和5v插口有限(各有一个),我们要用的传感器较多,所以想到了使用面包板来扩展 开发板,如下图: () ![图片说明](https://img-ask.csdn.net/upload/201907/27/1564211671_833410.jpg) 图中两根灰色的线给面包板供了电(我们知道这种方法可能不太正确,但的确达到了使用目的) () 图中的蓝绿黄线所连接的是一个传感器,蓝绿线连接的分别是 3v3 和 负极,用于供电,黄色的线 是一个 DO输出(输出 0 或 1),这样连接之后,传感器可以正常的工作, () 但是我们想进一步改进,想法如下图: ![图片说明](https://img-ask.csdn.net/upload/201907/27/1564212073_239028.png) 直接将传感器插在面包板上使用,但是我们不知道 如何在面包板上复制ARM开发板上的引脚,在程序中 也就不能得到 DO输出。 () 我就想询问一下,我上面提到的 直接将传感器插上去使用的想法 可以实现吗? 是不是我的天方夜谭?
求spi通信verilog代码
小白急求FPGA与ARM板之间SPI通信模式0 的verilog代码,能收一字节回发一字节就行
STM32通过Uart与ARM通讯,arm_uart接收数据漏码,怎么整?
ARM发送<20字符的数据给stm32,stm32接收到数据后返回<5000字符的数据 ARM收到的数据有<10%的概率出现漏码(少了<20字符)。 arm后台运行7条线程的程序,主要是视频处理+uart通讯+tcp通讯 stm32的uart_tx连接电脑串口数据是正常的,到了arm就漏码了 先贴arm_uart的代码 uart_init ![图片说明](https://img-ask.csdn.net/upload/201811/08/1541647884_643074.png) uart_recv ![图片说明](https://img-ask.csdn.net/upload/201811/08/1541648073_111038.png) 我有个怀疑点,uart通讯用的是115200波特率,arm晶振用的是24MHz,stm32用12MHz 会不会是时钟周期没对上导致漏码?
stm32f103 USB时钟问题
stm32 有个官方的usb例程,但是是针对stm32f30…的,我想把它移植到stm32f103上边,但是在配置usb时钟的时候APB1ENR寄存器下的USBEN位一直为0,我单步运行,明明已经执行了使能USB时钟的操作,但是还是不行,8✘9=72/1.5=48时钟频率大小也是这么配置的,跪求大牛给点意见,折腾了两天了![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/9.gif)
stm32最小系统板异常发热
最近在做一个传感器采数利用串口通信,有一个stm32fs103最小系统和一块arm9板子,当我将两块板子利用串口线(简陋的tx和rx两根线进行连接)连接上,同时上电,将程序烧进stm32板子中,这块板子的电压转换LM1117-3.3v发热异常,是什么原因导致的,
KEIL MDK 怎么设置--no_conditionalize?
我的STM32L476在调用 arm_rfft_fast_f32函数时出现“ Warning: L6989W: Could not apply patch sdcomp-29491-629360 to instruction VPOP {d8-d15} at offset 0x1c2, instruction is within an IT block and is not the last instruction for arm_cfft_radix8_f32.o(.text).”的报错信息。网上查看了下,需要在KEIL里面将编译选项设置成--no_conditionalize,但是这一步不知道怎么操作。
初学求讲解例程STM32寄存器版LED闪烁
本人对下图中的代码理解:如果头文件SYSTEM.H没有在关联的文件中定义,那么就定义头文件SYSTEM.H ,画红圈的内容就是写一个头文件SYSTEM.H。 请问我的理解对吗?如不对请讲解,谢谢:) SYSTEM.H是固件库还是作者自己写的? ![图片说明](https://img-ask.csdn.net/upload/201510/09/1444400813_167350.png) 把下图中的例程编译后出现错误:C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" #error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" 这个错误是怎么产生的?如何决呢?谢谢:) ![图片说明](https://img-ask.csdn.net/upload/201510/09/1444402251_596673.jpg)
我想制作一个电子阅读器用stm32f103rct6,求住制作流程,网上有一个,不是很懂求指教
这是我从网上down的方法,有点不懂,关键就是编程还有MF RC522模块设计,求大虾指教,谢谢 1 硬件设计 1.1 硬件结构设计 RFID阅读器基于STM32单片机设计,芯片型号选择为STM32F103RBT6。该芯片为LQFP64封装, 内部有128 KB Flash和20 KB RAM,采用32位的ARM CortexTM-M3内核, 最高支持主频72 MHz,拥有2个SPI接口、 2个USART接口、1个USB接口、2个I2C接口和7个定时器。支持SWD和JTAG调试模式及IAP和ISP编程。 STM32单片机支持J-Link在线调试,J-Link调试有两种模式:JTAG调试和SWD调试。在线调试的便捷性,可以极大缩短程序的开发周期,提高开发效率。本系统采用的调试模式为SWD模式,只需2根SWDIO和SWCLK信号线,相比JTAG模式更加节约I/O口资源。阅读器的硬件结构框图如图1所示。 1.2 电源模块设计 系统可使用直流电源或电池供电,外部直流电源电压为8.4 V;电池电压为7.2 V,2 600 mA/h的锂电池。电源模块设计原理图如图2所示。 电源模块工作原理:当插座J1连接外部直流电源时,电流可经过D4给电池充电,直流电源经开关JP1连接IRF7404的G极,使IRF7404的D极与S极断开,则系统使用外部直流电源供电;当不使用直流电源、按下开关时,D4可将CD_POWER与电池断开,IRF7404的G极为低电平, IRF7404导通, 则系统使用电池供电。SYS_ POWER电压经过LM2576S-3.3转换为3.3 V为系统的各模块供电。 1.3 MF RC522模块设计 MF RC522是阅读器的读卡芯片,工作频率为13.56 MHz,工作模式支持ISO 14443A标准,芯片内部驱动器可以直接驱动阅读器的天线,无需其他电路。MF RC522具有3种接口模式:SPI接口模式、UART模式和I2C总线模式[3]。其中SPI模式的通信速度最快,可达到10 Mb/s。 MF RC522与主机接口模式有关的两个引脚为IIC和EA:当IIC引脚拉高时,表示当前模式为I2C模式,若IIC引脚为低电平时,再通过EA引脚电平来区分。EA为高电平时,表示SPI模式;为低电平时,则表示UART模式[4]。本设计中MF RC522与MCU采用SPI通信,与AT45DB161共享一个MCU的SPI2接口。 在系统中,MF RC522和天线电路一起作为单独模块使用,以便于更换与维修。天线模块与主板之间通过插座连接。 天线是阅读器中的一个重要组成部分。其作用是向外发射一组固定频率的电磁波,为射频卡提供能量、传递数据。 本系统中使用的是PCB天线,天线的设计关系到阅读器的读写距离,甚至关系到阅读器是否能正常与射频卡通信。RC522的天线设计须注意以下两点:(1)为了让射频卡能获取足够大的能量驱动本身的集成电路,设计天线时应该保证向外辐射足够大的电磁波; (2)为了提高读卡数据的准确性,需要考虑调谐电路的通频带,确保调制信号的准确性。 天线的匹配电路可分为:天线线圈、LC谐振电路和EMC滤波电路。RC522的天线匹配电路如图3所示,其中RQ为品质因素Q的匹配电阻,Lant为天线的电感。 1.4 显示模块设计 阅读器选用2.8英寸的TFT LCD触摸屏。在本系统中移植了GUI模块,使得人机交流界面操作更加便捷、友善。触摸屏为四线电阻屏,使用ADS7843作为A/D转换芯片。ADS7843是内置12位模/数转换、低导通电阻模拟开关的串行接口芯片,模/数转换输出范围0~4 095,工作电压2.7 V~5 V,参考电压VREF为1 V~VCC,转换电压的输入范围为0~VREF,最高转换速率为125 kHz[5]。ADS7843与MCU的接口为SPI1。 驱动层的程序基于硬件平台,主要是为中间服务层提供硬件驱动接口函数,完成底层的硬件操作。编写STM32的内部资源驱动程序时,调用了ST公司的固件库函数。 中间服务层主要是为上层应用程序提供库支持和服务接口。中间服务层的程序在驱动层程序上开发,并封装驱动程序的接口。如FATS文件系统是在AT45DB161的驱动程序上移植,为上层的应用程序提供文件创建、写入、读出、删除等服务;GUI模块是在LCD显示驱动程序上开发,将LCD驱动的画点画线函数封装成不同的控件,在控件上加载相应的数据结构,为界面应用程序提供控件的创建、销毁等操作。 应用层程序是面向用户,通过调用中间服务函数和库函数来完成相应的数据处理和控制功能等。 2.2 Free RTOS实时操作系统 Free RTOS是一个轻量级的操作系统,基本满足较小系统的需要。该操作系统完全免费且源码公开,同时具有可移植、可裁减、调度策略灵活的特点。 在本设计中Free RTOS的任务之间的关系如图5所示。 2.3 GUI模块 GUI模块是一个中间服务层程序,为显示应用程序提供控件显示服务。如控件的显示位置、尺寸、颜色以及控件响应的回调函数入口地址等。在本系统中GUI控件包含有文本框、编辑框、进度条、图像框、下拉列表、按钮等。每个控件都可以注册一个回调函数,这个函数对应了该控件的响应功能函数。 2.4 FAT文件系统 FatFs文件系统是中间服务层程序,建立在AT45DB161驱动程序上,文件系统提供了磁盘I/O接口和应用程序接口。磁盘I/O接口函数位于diskio.c文件,常用的接口函数有读磁盘disk_read()和写磁盘disk_write()。这两个函数分别调用AT45DB161驱动程序的读扇区和写扇区函数。在文件系统中一个扇区的大小为512 B,与AT45DB161的页大小一致。 为了使FatFs文件系统与Windows的文件系统兼容,要使用FAT32格式来格式化磁盘。f_open()函数与f_close()函数必须要成对出现,即打开一个文件操作完成后必须要关闭这个文件。在对文件进行操作前必须先调用f_mount(0,&Fs)函数对工作区进行注册,操作完成后也需要调用f_mount(0,NULL)函数对工作区进行注销。 2.5 MF RC522驱动程序流程 本系统中使用的射频卡为Mifare1 S50,也简称为M1卡,该卡有16个扇区,每个扇区有4个块,每个块可存储16 B的数据。MF RC522对M1卡进行读写控制,分别有寻卡、防碰撞、选卡、认证、读块和写块等过程。 MF RC522驱动程序流程如下: (1)寻卡:寻找感应区内所有符合ISO14443A标准的卡,寻卡成功后,返回卡的类型。 (2)防碰撞:通过防碰撞命令查看多张M1卡之间是否发生碰撞,若发生碰撞,使用防碰撞算法进行处理;若未发生碰撞,则MF RC522与M1卡进行通信,如果通信成功,读出M1卡中的序列号。 (3)选卡:根据M1卡的序列号进行选卡。 (4)密码验证:密码验证模式有验证A密钥和验证B密钥,通过这两种模式来验证块地址、密码和卡片序列号。 (5)读数据块:根据提供的块地址读取块数据。 (6)写数据块:根据提供的块地址写入块数据,操作完成后命令M1卡进入休眠状态。 2.6 AT45DB161D驱动程序 AT45DB161D是一个外部Flash存储器,拥有2 MB的容量,分为4 096个页,可配置为每页512 B,还拥有2个512 B的缓冲区。在主存储器正在编程时,缓冲区允许接收数据,且支持数据流式写入。AT45DB161的初始化包括STM32的引脚配置和SPI2接口配置,初始化之后才能进行读写操作。读写页操作流程如下: (1)读页操作流程 ①检测AT45芯片是否忙。若忙,则继续读忙,直到芯片空闲;若芯片空闲,则执行流程②。 ②向AT45芯片写入命令0x53和页地址。0x53命令是将Flash中整页的数据读到缓冲区1中。 ③向AT45芯片写入命令0xD4和页偏移地址及数据长度。0xD4命令是读缓冲区1中的数据。 ④读页操作完成。 (2)写页操作流程 ①检测AT45芯片是否忙。若忙,则继续读忙,直到芯片空闲;若芯片空闲,则执行流程②。 ②向AT45芯片写入命令0x84、页偏移地址及需要写入的数据。0x84命令是将数据写到缓冲区1中。 ③向AT45芯片写入命令0x83和页地址。0x83命令是将缓冲区1中的数据写到Flash指定的页。使用0x83命令,写入前不需要对页进行擦除操作。 ④写页操作完成。 3 性能测试与实验分析 3.1手持式阅读器的功能测试 需要测试的功能有对M1卡读写、文件读写、与PC机数据通信等功能。为了便于测试上述功能,将本设计应用在校园消费系统上进行测试。测试步骤如下: (1)用串口线将RFID阅读器与PC机相连。运行PC机的上位机程序,设置串口参数为:波特率9 600 b/s,数据位8 bit,停止位1 bit,无校验位,无流控制。 (2)对M1卡读写功能测试。通过上位机软件发送指令和数据至阅读器,阅读器将指定数据写入M1卡。然后再将M1卡数据读出,传回给上位机软件显示,并比较写入数据和读出数据,如图6所示。 (3)文件读写测试。由于读M1卡的数据以文件的形式存放在阅读器的外部Flash中,该Flash由文件系统管理。用USB线连接阅读器和PC机,阅读器以盘符的形式在PC机上显示,从磁盘中将文件复制到PC机上,用上位机软件打开读出软件,记录测试数据。 (4)与PC机数据通信测试。以上两项测试通过则表明阅读器能与PC机进行正常通信。 3.2 性能测试与分析 系统的性能测试主要是锂电池的续航时间及RFID有效读卡距离等。系统性能测试如表1所示。 (1)锂电池的续航时间需要分别测试最长待机时间和连续工作时间。 ①最长待机时间测试:将锂电池充满电,阅读器使用电池供电,将阅读器开机而不使用,记录待机时间。 ②连续工作时间测试:将锂电池充满电,阅读器使用电池供电,编写一个测试程序,让阅读器定时每30 s读取M1卡信息。记录工作时间。 ③用万用表分别测量阅读器的待机消耗电流和工作消耗电流,并记录电流值。 (2)RFID有效读卡距离。将阅读器固定不动,M1卡平行放在阅读器天线平面的正上方200 mm处,将M1卡缓慢向阅读器移动,直到阅读器能正确读取M1卡中数据为止。测量卡与阅读器天线之间的距离并记录数据。 通过对上述的系统功能、性能进行验证,分析实验测出的相应数据,系统的功能基本能达到了初期预设的技术指标。 本文设计的阅读器有良好的人机交流界面,可通过触控操作,显示屏可显示M1卡中存储信息。经过实验证明,在70 mm的范围内能准确读写M1卡中的数据。该阅读器具有超长待机和低功耗的功能。经过实际功能测试,已成功地将该设计应用于校园消费系统。 专注
CentOS 7.6 64bit with ARM系统下的docker安装mysql失败
linux版本为CentOS 7.6 64bit with ARM,docker在安装mysql是出现以下问题 docker pull mysql:5.7 5.7: Pulling from library/mysql no matching manifest for linux/arm64/v8 in the manifest list entries 问题原因我大概知道,linux系统是arm64v8的,但是docker镜像中没有对应的mysql版本,不知道有什么解决方法吗?
求编译LED闪烁代码出错解决办法
如下错误如何解决?谢谢! C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" #error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"
ARM9作为上位机控制下位机
想用ARM9作为主控板(上位机),STM32作为从机(下位机),ARM9对下位机发出指令,下位机执行,应该如何实现?
stm 32 关于RTC库函数的小问题
1、RTC_WaitForSynchro() 上面这个函数是进行APB1和RTC时钟同步用的,为什么要进行同步呢,具体有什么作用啊,我不同步行不行呢? 2、还有就是 RTC_WaitForLastTask()这个函数在F40X系列的ARM芯片RTC库函数中已经没有了,这个有什么影响吗? 3、最后一个问题是关于预分频系数设置的,这个先后顺序有没有关系的,本人小白,刚接触stm32。
嵌入式arm板子 SPI 接口
SPI 接口不需要接地线吗?没有地线怎么识别电平?用示波器一端接输出,另一端接哪个脚能测它的输出波形?
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载 点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
作者 | Google团队 译者 | 凯隐 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 本文中,Google 团队提出了一种文本语音合成(text to speech)神经系统,能通过少量样本学习到多个不同说话者(speaker)的语音特征,并合成他们的讲话音频。此外,对于训练时网络没有接触过的说话者,也能在不重新训练的情况下,仅通过未知...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
4G EPS 第四代移动通信系统
目录 文章目录目录4G 与 LTE/EPCLTE/EPC 的架构E-UTRANE-UTRAN 协议栈eNodeBEPCMMES-GWP-GWHSSLTE/EPC 协议栈概览 4G 与 LTE/EPC 4G,即第四代移动通信系统,提供了 3G 不能满足的无线网络宽带化,主要提供数据(上网)业务。而 LTE(Long Term Evolution,长期演进技术)是电信领域用于手机及数据终端的高速无线通...
相关热词 c# 输入ip c# 乱码 报表 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件
立即提问