《4(100%开源)蓝牙心率防水运动手环_外部Flash读写.docx》由会员分享,可在线阅读,更多相关《4(100%开源)蓝牙心率防水运动手环_外部Flash读写.docx(7页珍藏版)》请在第一文库网上搜索。
1、蓝牙心率防水运动手环外部Flash读写疯壳-智能穿戴开发系列配套资料:https:/www.fengke.club/GeekMart/su_fkZyGYgrp.jsp配套视频:https:/www.fengke.club/GeekMart/su_fTSgUL3y3.jsp外部flash读写1 SPI+简介本节中,我们将使用DA14580自带的SPI+来进行对外部Flash的读写操作。SPI (Serial Peripheral interface),串行外围设备接口,是是 Motorola 首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM、FLASH、实时时钟、AD
2、转换器,还有数字信号处理器和数字信号解码器之间。该接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线NSSo我们DA14580的这个SPI+接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接受8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2*16位字的FIFO,功能得到了增强。我们这个接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz, SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、
3、3四种工作模式;SPIDO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。2硬件设计本次我们所使用的外部Flash是W25X20CL,它一共有8个引脚。1号引脚CS用于芯片的选择。2号引脚DO是数据输出引脚。3号引脚WP是写保护。4号是GNDo 5号DIO引脚既可以作为数据输入,也可以作为数据输出。6脚CLK是Flash的串行时钟信号。第7脚用于暂停SPI的通信。最后VCC就是电源脚。3 软件设计要通过SPI进行对外部Flash的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数periph_init()ovoid periphjnit(void)/ sy
4、stem initSetWordl6(CLK_AMBA_REG, 0x00);/ 设置 16MHz 时钟SetWordl6(SET_FREEZE_REG,FRZ_WDOG);关闭看门狗SetBitsl6(SYS_CTRL_REG,PAD_LATCH_EN/l);/ 开启管脚SetBitsl6(SYS_CTRL_REG,DEBUGGER_ENABLE,l); 开启 debuggerSetBitsl6(PMU_CTRL_REG, PERIPH_SLEEP,O); / 打开外围电源/ Power up peripherals power domainSetBitsl6(PMU_CTRL_REG, P
5、ERIPH_SLEEPZ 0);while (!(GetWordl6(SYS_STAT_REG) & PER_IS_UP);/Init padsGPIO_ConfigurePin(UART2_GPIO_PORT, UART2_TX_PINZ OUTPUT, PID_UART2_TX, false);GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_RX_PIN, INPUT, PID_UART2_RX, false);GPIO_ConfigurePin(SPI_GPIO_PORT, SPI_CS_PIN, OUTPUT, PID_SPI_ENZ true);GP
6、IO_ConfigurePin(SPI_GPIO_PORT, SPI_CLK_PIN, OUTPUT, RID_SPI_CLK, false);GPIO_ConfigurePin(SPI_GPIO_PORT, SPI_DO_PIN, OUTPUT, PID_SPI_DO, false);GPIO_ConfigurePin(SPI_GPIO_PORT, SPI_DI_PIN, INPUT, PID_SPI_DI, false);/ Initialize UART componentSetBitsl6(CLK_PER_REG, UART2_ENABLEZ 1);/ enable clock for
7、 UART 2uart2_init(UART2_BAUDRATEz UART2_DATALENGTH);在periph_init()中,我们完成了 SPI, uart2的管脚配置,以及对串口 2进行初始化。然后,我们要进行的是对SPI接口的一个初始化。void spiJnit(SPI_Pad_t *cs_pad_param, SPI_Word_Mode_t bitmode, SPI_Role_trole, SPI Polarity Mode t elk pol, SPI PHA Mode t pha mode, SPI MINT Mode tirq, SPI_XTAL_Freq_t freq)
8、第一个参数cs_pad_param是分配给SPI CS信号的端口管脚,我们这里用的是0.3脚。第二个参数bitmode是SPI操作的位数,有8916.32位操作模式,我们这里用的8位,所以填写SPI_MODE_8BITo第三个参数role是用来配置我们SPI的工作方式,我们这里用的是主SPI,因此选择 SPI_ROLE_MASTER o第四个参数clk_pol是用来选择SPI时钟空闲极性,我们用的是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。参数pha_mode是选择SPI的采样边沿,我们这里选的是SPI_PHA_MODE_Oo最后两个参数irq和freq分别
9、是用来配置SPI中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8o以上是我们对SPI的初始化设置,当然,大家也可以根据自己的需求进行配置。对SPI初始化设置完成之后,我们就可以开始读写外部Flash 了,通过调用:int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)o4 实验
10、现象首先,插好川nk和USB转串口,然后打开打开串口调试助手。(D 选择串口号,我们图中是C0M1,这个根据实际情况选择。 配置串口参数,波特率为115200,数据位8,停止位1,没有校验位和控制流,与下图一致。(3)点击打开串口,4是串口接收框。I * SSCOM3.2 (作者:聂1 缢(J), i, Email: mcu52l- _ |口| x|4打开文住J友评茗串口号COMI打开串口帮助r RTSnyiR L定时发送阿。次发送文件I保存窗口 |清除窗口 |厂hex显示WWW. MCUS1 .COM 扩展皮特率的据位停止位校蛉位充控制115200 8三1丁None None r HEX发送
11、发送新行字符串输入框:厂发法PCB打样那家强?当然就是嘉立创!【官网】嘉77创PCB打样-SMT贴片一元器件商城一条龙眼至打样话加助理粱雁嬉的QQ : 800058315坏情特术:品慎排茬:W】Fi/Gprs/GPS【安信可射频橙组】【点次里升级为SSC0M5. 13版】可在winlO云行!r厂.一一 -r-I/ww.mcu51.cor S:4R:0COMI 已关闭 115200bps CTS=O DSR=O RL配置完串口之后,打开我们提供的代码。(1)点击仿真按键。图3(2)点击运行代码。SSCOM3.2 (作者:聂J垄(TT主页http:www.rfi标|51:血WLEmail: me.
12、*痂壳团队*FK-DA14580-V1.0* 官网:www. fengke, club *淘宝:shop 115904315. taobao. com*457586268官方Q Q群:* 1 1 1 1 L L L L * L L L L L L *L L L 1 L L L L L L L L L L A L t L L L L L L L LL L L L L L L L L-L L L L L L L L L L1 T 1 i r , 7 i I , I 1 i Till i i i T , 1 i I T Tif I , T I T , I Til r I r T , I , T t 1 t I , i 1 T , J I r , i I T I i , - 11 T T - i r r T T T I i j*SPI TESTL L L A 4 L A L L L L A i A A L L , 1 i , , 1 I J I, i 1 i i , , , 1 , * i , I , * i *i* * ,i* i * I * I , , 1 , * 1 ,