<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=46&amp;t=3218&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-08-04T20:37:12+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=3218&amp;mode</id>
<entry>
<author><name><![CDATA[Badman]]></name></author>
<updated>2013-08-04T20:37:12+01:00</updated>
<published>2013-08-04T20:37:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=44421#p44421</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=44421#p44421"/>
<title type="html"><![CDATA[Re: [STM32F0][CooIDE] RFM73]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=44421#p44421"><![CDATA[
Panowie zakonczyliscie prace nad obsluga RFM73 ?<br />Ktos sie pochwali i udostepni ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=916">Badman</a> — 4 sie 2013, o 20:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jack88]]></name></author>
<updated>2013-06-02T01:41:35+01:00</updated>
<published>2013-06-02T01:41:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=38332#p38332</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=38332#p38332"/>
<title type="html"><![CDATA[Re: [STM32F0][CooIDE] RFM73]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=38332#p38332"><![CDATA[
Kolejne próby modyfikacji pod STM32F0 i RFM73. Teoretycznie powinno działać - jednakże nadal nie dochodzi do komunikacji.<br /><br />rfm70.h<br />[syntax]/* ****************************************************************************/<br />/*  PWr*/<br />/*01-12-2010r*/<br />/**/<br />/*Program Grzegorza Kołodziejczyka*/<br />/* RFM70 - header*/<br />/*uC STM8s - RFM70 (2,4 GHz)    */<br />/*ver. 1.0  */<br />/* */<br />/**/<br />/* ****************************************************************************/<br /><br /><br />#ifndef _RFM70_H_<br />#define _RFM70_H_<br />#include &lt;stdio.h&gt;<br />#include &lt;stdarg.h&gt;<br />#include &lt;string.h&gt;<br />#include &quot;stm32f0xx.h&quot;<br /><br />#include &quot;stm32f0xx_cec.h&quot;<br />#include &quot;stm32f0xx_crc.h&quot;<br />#include &quot;stm32f0xx_comp.h&quot;<br />#include &quot;stm32f0xx_dac.h&quot;<br />//#include &quot;stm32f0xx_dbgmcu.h&quot;<br />#include &quot;stm32f0xx_dma.h&quot;<br />#include &quot;stm32f0xx_exti.h&quot;<br />#include &quot;stm32f0xx_flash.h&quot;<br />#include &quot;stm32f0xx_gpio.h&quot;<br />#include &quot;stm32f0xx_syscfg.h&quot;<br />#include &quot;stm32f0xx_i2c.h&quot;<br />#include &quot;stm32f0xx_iwdg.h&quot;<br />#include &quot;stm32f0xx_pwr.h&quot;<br />#include &quot;stm32f0xx_rcc.h&quot;<br />#include &quot;stm32f0xx_rtc.h&quot;<br />#include &quot;stm32f0xx_spi.h&quot;<br />#include &quot;stm32f0xx_tim.h&quot;<br />#include &quot;stm32f0xx_usart.h&quot;<br />#include &quot;stm32f0xx_wwdg.h&quot;<br />#include &quot;stm32f0xx_misc.h&quot;<br /><br />#define CE_PORTGPIOA<br />#define CE_PINGPIO_Pin_3<br /><br />#define CSN_PORTGPIOA<br />#define CSN_PINGPIO_Pin_4<br /><br />#define SCK_PORTGPIOA<br />#define SCK_PINGPIO_Pin_5<br /><br />#define MISO_PORTGPIOA<br />#define MISO_PINGPIO_Pin_6<br /><br />#define MOSI_PORTGPIOA<br />#define MOSI_PINGPIO_Pin_7<br /><br />#define MAX_PACKET_LEN  32// max value is 32<br /><br />//************************FSK COMMAND and REGISTER****************************************//<br /><br /><br />// SPI(RFM70) commands<br />typedef enum {<br />RD_RX_PLOAD=(unsigned char)0x61,  // Define RX payload register address<br />WR_TX_PLOAD=(unsigned char)0xA0,  // Define TX payload register address<br />FLUSH_TX=(unsigned char)0xE1,  // Define flush TX register command<br />FLUSH_RX=(unsigned char)0xE2,  // Define flush RX register command<br />REUSE_TX_PL=(unsigned char)0xE3,  // Define reuse TX payload register command<br />NOP_NOP=(unsigned char)0xFF  // Define No Operation, might be used to read status register<br />}RFM70_Commands_TypeDef;<br /><br />typedef enum {<br />W_TX_PAYLOAD_NOACK_CMD=(unsigned char)0xb0,<br />W_ACK_PAYLOAD_CMD=(unsigned char)0xa8,<br />R_RX_PL_WID_CMD=(unsigned char)0x60<br />}RFM70_TRx_TypeDef;<br /><br />typedef enum {<br />ACTIVATE_CMD=(unsigned char)0x50<br />}RFM70_CommandsW_Typedef;<br />typedef enum {<br />READ_REG= (unsigned char)0x00,  // Define read command to register<br />WRITE_REG=(unsigned char)0x20  // Define write command to register<br />} RFM70_RWReg_TypeDef;<br /><br />// SPI(RFM70) registers(addresses)<br />typedef enum {<br /> CONFIG=(unsigned char)0x00,  // 'Config' register address<br /> EN_AA=(unsigned char)0x01,  // 'Enable Auto Acknowledgment' register address<br /> EN_RXADDR=(unsigned char)0x02,  // 'Enabled RX addresses' register address<br /> SETUP_AW=(unsigned char)0x03,  // 'Setup address width' register address<br /> SETUP_RETR=(unsigned char)0x04,  // 'Setup Auto. Retrans' register address<br /> RF_CH=(unsigned char)0x05,  // 'RF channel' register address<br /> RF_SETUP=(unsigned char)0x06,  // 'RF setup' register address<br /> STATUS=(unsigned char)0x07,  // 'Status' register address<br /> OBSERVE_TX=(unsigned char)0x08,  // 'Observe TX' register address<br /> CD=(unsigned char)0x09,  // 'Carrier Detect' register address<br /> RX_ADDR_P0=(unsigned char)0x0A,  // 'RX address pipe0' register address<br /> RX_ADDR_P1=(unsigned char)0x0B,  // 'RX address pipe1' register address<br /> RX_ADDR_P2=(unsigned char)0x0C,  // 'RX address pipe2' register address<br /> RX_ADDR_P3=(unsigned char)0x0D,  // 'RX address pipe3' register address<br /> RX_ADDR_P4=(unsigned char)0x0E,  // 'RX address pipe4' register address<br /> RX_ADDR_P5=(unsigned char)0x0F,  // 'RX address pipe5' register address<br /> TX_ADDR=(unsigned char)0x10,  // 'TX address' register address<br /> RX_PW_P0=(unsigned char)0x11,  // 'RX payload width, pipe0' register address<br /> RX_PW_P1=(unsigned char)0x12,  // 'RX payload width, pipe1' register address<br /> RX_PW_P2=(unsigned char)0x13,  // 'RX payload width, pipe2' register address<br /> RX_PW_P3=(unsigned char)0x14,  // 'RX payload width, pipe3' register address<br /> RX_PW_P4=(unsigned char)0x15,  // 'RX payload width, pipe4' register address<br /> RX_PW_P5=(unsigned char)0x16,  // 'RX payload width, pipe5' register address<br /> FIFO_STATUS=(unsigned char)0x17,  // 'FIFO Status Register' register address<br /> FEATURE=(unsigned char)0x1D, // 'FEATURE register address<br /> PAYLOAD_WIDTH=(unsigned char)0x1f  // 'payload length of 256 bytes modes register address<br />}RFM70_RegAddr_TypeDef;<br /><br />typedef enum {<br />A_00=(unsigned char)0x00,<br />A_01=(unsigned char)0x01,<br />A_02=(unsigned char)0x02,<br />A_03=(unsigned char)0x03,<br />A_04=(unsigned char)0x04,<br />A_05=(unsigned char)0x05,<br />A_0C=(unsigned char)0x0C,<br />A_0D=(unsigned char)0x0D,<br />A_0E=(unsigned char)0x0E<br />} RFM70_RegAddr1_TypeDef;<br /><br />//interrupt status<br />typedef enum {<br />STATUS_RX_DR = (unsigned char)0x40,<br />STATUS_TX_DS =(unsigned char)0x20,<br />STATUS_MAX_RT =(unsigned char)0x10,<br />STATUS_TX_FULL =(unsigned char)0x01<br />} RFM70_IrqStat_TypeDef;<br /><br />//FIFO_STATUS<br />typedef enum {<br />FIFO_STATUS_TX_REUSE = (unsigned char)0x40,<br />FIFO_STATUS_TX_FULL = (unsigned char)0x20,<br />FIFO_STATUS_TX_EMPTY = (unsigned char)0x10,<br /><br />FIFO_STATUS_RX_FULL = (unsigned char)0x02,<br />FIFO_STATUS_RX_EMPTY = (unsigned char)0x01<br />}RFM70_FifoStat_Typedef;<br /><br />/*****************************<br /><br /> FUNCTION DECLARATION<br /><br />****************************/<br /><br />void SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes);<br />void SPI_Write_Buf(RFM70_RWReg_TypeDef RW,RFM70_RegAddr_TypeDef addr, unsigned char *pBuf, unsigned char length);<br /><br />unsigned char SPI_Read_Reg(RFM70_RegAddr_TypeDef addr);<br />void SPI_Write_Reg(RFM70_RWReg_TypeDef RW,RFM70_RegAddr_TypeDef addr, unsigned char value);<br /><br />void SPI_Command(RFM70_Commands_TypeDef cmd);<br /><br />void RFM70_SwitchToTxMode(void);<br />void RFM70_SwitchToRxMode(void);<br /><br />void SPI_Bank1_Read_Reg(unsigned char reg, unsigned char *pBuf);<br />void SPI_Bank1_Write_Reg(unsigned char reg, unsigned char *pBuf);<br />void SwitchCFG(char _cfg);<br /><br />void CSN_Low(void);<br />void CSN_High(void);<br />void CE_Low(void);<br />void CE_High(void);<br /><br />void RFM70_Initialize(void);<br /><br />void Send_Packet(RFM70_TRx_TypeDef type,unsigned char* pbuf,unsigned char len);<br />void Receive_Packet(unsigned char *rx_buf);<br /><br /><br />// Banks initialize<br />void Ini_Bank0(void);<br />void Ini_Bank1(void);<br /><br /><br />void DelayMs(int ms);<br /><br />#endif[/syntax]<br /><br />rfm70.c<br />[syntax]/* ****************************************************************************/<br />/* PWr*/<br />/* 01-12-2010r*/<br />/**/<br />/*Program Grzegorza Kołodziejczyka*/<br />/*    RFM70 - library*/<br />/* uC STM8s - RFM70 (2,4 GHz)    */<br />/*ver. 1.0  */<br />/*       */<br />/**/<br />/* ****************************************************************************/<br /><br />//#include &quot;stm8s.h&quot;<br />//#include &quot;stm8s_spi.h&quot;<br />#include &lt;stddef.h&gt;<br />//#include &quot;stm32f10x.h&quot;<br />#include &quot;RFM70.h&quot;<br /><br />#include &quot;stm32f0xx_cec.h&quot;<br />#include &quot;stm32f0xx_crc.h&quot;<br />#include &quot;stm32f0xx_comp.h&quot;<br />#include &quot;stm32f0xx_dac.h&quot;<br />//#include &quot;stm32f0xx_dbgmcu.h&quot;<br />#include &quot;stm32f0xx_dma.h&quot;<br />#include &quot;stm32f0xx_exti.h&quot;<br />#include &quot;stm32f0xx_flash.h&quot;<br />#include &quot;stm32f0xx_gpio.h&quot;<br />#include &quot;stm32f0xx_syscfg.h&quot;<br />#include &quot;stm32f0xx_i2c.h&quot;<br />#include &quot;stm32f0xx_iwdg.h&quot;<br />#include &quot;stm32f0xx_pwr.h&quot;<br />#include &quot;stm32f0xx_rcc.h&quot;<br />#include &quot;stm32f0xx_rtc.h&quot;<br />#include &quot;stm32f0xx_spi.h&quot;<br />#include &quot;stm32f0xx_tim.h&quot;<br />#include &quot;stm32f0xx_usart.h&quot;<br />#include &quot;stm32f0xx_wwdg.h&quot;<br />#include &quot;stm32f0xx_misc.h&quot;<br /><br />// ***********************************************<br />// sending to RFM70 MSB first<br />// **********************************************/<br /><br />//Banks1 registers which must be writen<br />//0-8;Byte(MSB-&gt;LSB), Bit(MSB-&gt;LSB)<br />const unsigned char Bank1_Reg00&#91;&#93;={0x40,0x4B,0x01,0xE2};<br />const unsigned char Bank1_Reg01&#91;&#93;={0xC0,0x4B,0x00,0x00};<br />const unsigned char Bank1_Reg02&#91;&#93;={0xD0,0xFC,0x8C,0x02};<br />const unsigned char Bank1_Reg03&#91;&#93;={0x99,0x00,0x39,0x41};<br />//const unsigned char Bank1_Reg04&#91;&#93;={0xD9,0x96,0x82,0x1B};<br />//const unsigned char Bank1_Reg04&#91;&#93;={0x0B,0x86,0x9E,0xF9};<br />//const unsigned char Bank1_Reg04&#91;&#93;={0xD9,0xB6,0x82,0x1B};<br />const unsigned char Bank1_Reg04&#91;&#93;={0xD9,0x9E,0x86,0x0B}; //Must  write  with<br />//const unsigned char Bank1_Reg04&#91;&#93;={0xD9,0x9E,0x86,0x21}; //For  single  carrier  mode:0xD99E8621<br />const unsigned char Bank1_Reg05&#91;&#93;={0x24,0x06,0x7F,0xA6};<br />const unsigned char Bank1_Reg08&#91;&#93;={0x00,0x00,0x00,0x63};<br />//12-14;Byte(LSB-&gt;MSB), Bit(MSB-&gt;LSB)<br />/*0C<br /> * Please  initialize  with  0x05731200<br />For  120us  mode:0x00731200<br /> */<br />const unsigned char Bank1_Reg0C&#91;&#93;={0x00,0x12,0x73,0x00};<br />//const unsigned char Bank1_Reg0C&#91;&#93;={0x00,0x12,0x73,0x05};<br />//const unsigned char Bank1_Reg0D&#91;&#93;={0x36,0xB4,0x80,0x00};<br />//const unsigned char Bank1_Reg0D&#91;&#93;={0x46,0xB4,0x80,0x00};<br />const unsigned char Bank1_Reg0D&#91;&#93;={0x36,0xB4,0x80,0x00};<br />//const unsigned char Bank1_Reg0E&#91;&#93;={0x41,0x20,0x08,0x04,0x81,0x20,0xCF,0xF7,0xFE,0xFF,0xFF};<br />const unsigned char Bank1_Reg0E&#91;&#93;={0x41,0x10,0x04,0x82,0x20,0x08,0x08,0xF2,0x7D,0xEF,0xFF};<br /><br />//Initializing values of Bank0 registres<br />const unsigned char Bank0_Reg&#91;&#93;&#91;2&#93;={<br />{0x00,0x0F},//0CONFIG//reflect RX_DR\TX_DS\MAX_RT,Enable CRC ,2byte,POWER UP,PRX<br />{0x01,0x3F},//1EN_AA//Enable auto acknowledgement data pipe5\4\3\2\1\0<br />{0x02,0x3F},//2EX_RXADDR//Enable RX Addresses pipe5\4\3\2\1\0<br />{0x03,0x03},//3SETUP_AW//RX/TX address field width 5byte<br />{0x04,0xff},//4SETUP_RETR//auto retransmission dalay (4000us),auto retransmission count(15)<br />{0x05,0x17},//5RF_CH//23 channel<br />{0x06,0x17},//6RF_SETUP//air data rate-1M,out power 0dbm,setup LNA gain<br />{0x07,0x07},//7STATUS//<br />{0x08,0x00},//8OBSERVER_TX//<br />{0x09,0x00},//9CD//<br />{0x0C,0xc3},//10RX_ADDR_P2//only LSB Receive address data pipe 2, MSB bytes is equal to RX_ADDR_P1&#91;39:8&#93;<br />{0x0D,0xc4},//11RX_ADDR_P3//only LSB Receive address data pipe 3, MSB bytes is equal to RX_ADDR_P1&#91;39:8&#93;<br />{0x0E,0xc5},//12RX_ADDR_P4//only LSB Receive address data pipe 4, MSB bytes is equal to RX_ADDR_P1&#91;39:8&#93;<br />{0x0F,0xc6},//13RX_ADDR_P5//only LSB Receive address data pipe 5, MSB bytes is equal to RX_ADDR_P1&#91;39:8&#93;<br />{0x11,0x20},//14RX_PW_P0//Number of bytes in RX payload in data pipe0(32 byte)<br />{0x12,0x20},//15RX_PW_P1//Number of bytes in RX payload in data pipe1(32 byte)<br />{0x13,0x20},//16RX_PW_P2//Number of bytes in RX payload in data pipe2(32 byte)<br />{0x14,0x20},//17RX_PW_P3//Number of bytes in RX payload in data pipe3(32 byte)<br />{0x15,0x20},//18RX_PW_P4//Number of bytes in RX payload in data pipe4(32 byte)<br />{0x16,0x20},//19RX_PW_P5//Number of bytes in RX payload in data pipe5(32 byte)<br />{0x17,0x00},//20FIFO_STATUS//fifo status<br />{0x1C,0x3F},//21DYNPD//Enable dynamic payload length data pipe5\4\3\2\1\0<br />{0x1D,0x07}//22FEATURE//Enables Dynamic Payload Length,Enables Payload with ACK,Enables the W_TX_PAYLOAD_NOACK command<br />};<br />//Address = Bank1_Reg0A pipe 0 &amp; Bank1_Reg0B pipe 1; in Bank 0<br />//const unsigned char RX0_Address&#91;&#93;={0xE7,0xE7,0xE7,0xE7,0xE7};//Receive address data pipe 0-&gt; default value<br />//const unsigned char RX1_Address&#91;&#93;={0xC2,0xC2,0xC2,0xC2,0xC2};//Receive address data pipe 1 -&gt; default value<br />//const unsigned char RX0_Address&#91;&#93;= {0x34,0x43,0x10,0x10,0x01};//Receive address data pipe 0<br />//const unsigned char RX1_Address&#91;&#93;= {0x39,0x38,0x37,0x36,0xc2};//Receive address data pipe 1<br />const unsigned char RX0_Address&#91;&#93;={0xE7,0xE7,0xE7,0xE7,0xE7};//Receive address data pipe 0-&gt; default value<br />const unsigned char RX1_Address&#91;&#93;={0xC2,0xC2,0xC2,0xC2,0xC2};//Receive address data pipe 1 -&gt; default value<br />/*******************************************************************/<br />/*******************************************************************/<br /><br />extern unsigned char rx_buf&#91;MAX_PACKET_LEN&#93;;<br /><br />extern void delay_200ms(void);<br />extern void delay_50ms(void);<br /><br />unsigned char status;<br /><br />// **************************************************<br />// Function: SPI_R/W(void);<br />// **************************************************/<br />unsigned char SPI_R(void)<br />{<br />//while (SPI_GetFlagStatus(SPI_FLAG_TXE)== RESET) {}// wait until TX buffer will be empty<br />while (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)== RESET) {}// wait until TX buffer will be empty<br />SPI_I2S_SendData16(SPI1,0);// Send no data - to read the value from register<br /><br />//SPI_SendData8(SPI1,0);<br />while (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY) == SET) {}// wait until SPI is ready<br />while (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)== RESET) {}// wait until Rx buffer will be ready to read<br /><br />return(SPI_I2S_ReceiveData16(SPI1));<br />//return(SPI_ReceiveData8(SPI1));<br />}<br />void SPI_W(unsigned char value)// OK<br />{<br />while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET) {}// wait until SPI is ready<br />while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)== RESET) {}// wait until TX buffer will be empty<br />status=0;<br /><br />SPI_I2S_SendData16(SPI1, value);// Write the read register command<br />//SPI_SendData8(SPI1, value);<br />while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET) {}// wait until SPI is ready<br />while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE)== RESET) {}// wait until Rx buffer will be ready to read<br />SPI_I2S_SendData16(SPI1, value);// Read the status register<br />//SPI_SendData8(SPI1, value);<br />}<br /><br />/**************************************************<br />Function: CSN_Low(); CSN_High();<br />**************************************************/<br />void CSN_Low(void)<br />{<br />GPIO_ResetBits(CSN_PORT, CSN_PIN);<br />}<br />void CSN_High(void)<br />{<br />GPIO_SetBits(CSN_PORT, CSN_PIN);<br />}<br /><br />/**************************************************         <br />Function: CE_Low(); CE_High();<br />**************************************************/<br />void CE_Low(void){GPIO_ResetBits(CE_PORT, CE_PIN);}<br />void CE_High(void){GPIO_SetBits(CE_PORT, CE_PIN);}<br /><br />void SPI_Command(RFM70_Commands_TypeDef cmd)<br />{<br />CSN_Low();// CSN low, init SPI transaction<br />SPI_W(cmd);// Do cmd<br />CSN_High();// CSN high again, end SPI transaction<br />}<br />/**************************************************<br />Function: SPI_Write_Reg();                                  <br /><br />Description:                                                <br />Writes value 'value' to register 'reg'              <br />**************************************************/<br />void SPI_Write_Reg(RFM70_RWReg_TypeDef write,RFM70_RegAddr_TypeDef addr, unsigned char value)<br />{<br />CSN_Low();// CSN low, init SPI transaction<br />SPI_W(write|addr);// select register<br />SPI_W(value);// ..and write value to it..<br />CSN_High();// CSN high again, end SPI transaction<br />}<br /><br />/**************************************************         <br />Function: SPI_Read_Reg();                                   <br /><br />Description:                                                <br />Read one unsigned char from RFM70 register, 'reg'<br />**************************************************/<br />unsigned char SPI_Read_Reg(RFM70_RegAddr_TypeDef addr)<br />{                                                           <br />unsigned char value;<br /><br />CSN_Low();// CSN low, initialize SPI transaction<br />SPI_W(addr);// Select register to read from.<br />value = SPI_R();// ..then read register value<br />CSN_High();// CSN high, terminate SPI communication<br /><br />return(value);// return register value<br />}                                                           <br />/**************************************************/        <br /><br />/**************************************************         <br />Function: SPI_Read_Buf();                                   <br /><br />Description:                                                <br />Reads 'length' #of length from register 'reg'         <br />**************************************************/<br />void SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char length)<br />{                                                           <br />unsigned char byte_ctr;<br /><br />CSN_Low();<br />SPI_W(reg);// Select register to write, and read status unsigned char<br />for(byte_ctr=0;byte_ctr&lt;length;byte_ctr++)<br />pBuf&#91;byte_ctr&#93; = SPI_R();// Perform SPI_RW to read unsigned char from RFM70<br />CSN_High();// Set CSN high again<br />}<br />/**************************************************/<br /><br />/**************************************************<br />Function: SPI_Write_Buf();<br /><br />Description:<br />Writes contents of buffer '*pBuf' to RFM70<br />**************************************************/<br />void SPI_Write_Buf(RFM70_RWReg_TypeDef RW,RFM70_RegAddr_TypeDef addr, unsigned char *pBuf, unsigned char length)<br />{<br />unsigned char byte_ctr;<br /><br />CSN_Low();// Set CSN low, init SPI tranaction<br />SPI_W(RW|addr);// Select register to write to and read status unsigned char<br />for(byte_ctr=0; byte_ctr&lt;length; byte_ctr++) // then write all unsigned char in buffer(*pBuf)<br />SPI_W(*pBuf++);<br />CSN_High();// Set CSN high again<br /><br />}<br /><br />/**************************************************<br />Function: SPI_Activate(RFM_CommandsW_Typedef activate);<br />Description:<br />Change the bank0&lt;-&gt;bank1<br />**************************************************/<br />void SPI_Activate(RFM70_CommandsW_Typedef activate, unsigned char cmd)<br />{<br />CSN_Low();<br />SPI_W(activate);<br />SPI_W(cmd);<br />CSN_High();<br />}<br />/***********INITIALIZE FUNCTIONS***************************<br /><br />**************************************************<br />Function: SPI_Read_Buf();<br /><br />Description:<br />Reads 'length' #of length from register 'reg'<br />**************************************************/<br />void SPI_Read_Ini_Buf(unsigned char reg, unsigned char *pBuf, unsigned char length)<br />{<br />unsigned char byte_ctr;<br /><br />CSN_Low();<br />SPI_W(reg);// Select register to write, and read status unsigned char<br />for(byte_ctr=0;byte_ctr&lt;length;byte_ctr++)<br />pBuf&#91;byte_ctr&#93; = SPI_R();// Perform SPI_RW to read unsigned char from RFM70<br />CSN_High();// Set CSN high again<br />}                                                           <br />/**************************************************/        <br /><br />/**************************************************         <br />Function: SPI_Write_Ini_Buf();<br /><br />Description:                                                <br />Writes contents of buffer '*pBuf' to RFM70<br />*************************************************/<br />void SPI_Write_Ini_Buf(RFM70_RWReg_TypeDef RW,RFM70_RegAddr1_TypeDef addr, unsigned char *pBuf, unsigned char length)<br />{                                                           <br />unsigned char byte_ctr;<br /><br />CSN_Low();// Set CSN low, init SPI tranaction<br />SPI_W(RW|addr);// Select register to write to and read status unsigned char<br />for(byte_ctr=0; byte_ctr&lt;length; byte_ctr++) // then write all unsigned char in buffer(*pBuf)<br />SPI_W(*pBuf++);<br />CSN_High();// Set CSN high again<br /><br />}<br /><br />/**************************************************<br />Function: SwitchToRxMode();<br />Description:<br />switch to Rx mode<br />**************************************************/<br />void RFM70_SwitchToRxMode()<br />{<br />unsigned char value;<br /><br />SPI_Command(FLUSH_RX);//flush Rx<br />value=SPI_Read_Reg(STATUS);// read register STATUS's value<br />SPI_Write_Reg(WRITE_REG,STATUS,value);// clear RX_DR or TX_DS or MAX_RT interrupt flag<br />CE_Low();<br />value=SPI_Read_Reg(CONFIG);// read register CONFIG's value<br />//PRX<br />value=value|0x01;<br />  SPI_Write_Reg(WRITE_REG, CONFIG, value); // Set PWR_UP bit, enable CRC(2 length) &amp; Prim:RX. RX_DR enabled..<br />CE_High();<br />}<br /><br />/**************************************************<br />Function: RFM70_SwitchToTxMode();<br />Description:<br />switch to Tx mode<br />**************************************************/<br />void RFM70_SwitchToTxMode()<br />{<br />unsigned char value;<br />SPI_Command(FLUSH_TX);//flush Tx<br />CE_Low();<br />value=SPI_Read_Reg(CONFIG);// read register CONFIG's value<br />//PTX<br />value=value&amp;0xfe;//mask all bits without first / switch to PTX<br />  SPI_Write_Reg(WRITE_REG, CONFIG, value); // Set PWR_UP bit, enable CRC(2 length) &amp; Prim:RX. RX_DR enabled.<br />CE_High();<br />}<br /><br />/**************************************************<br />Function: SwitchCFG();<br />                                                            <br />Description:<br /> access switch between Bank1 and Bank0 <br /><br />Parameter:<br />_cfg      1:register bank1<br />          0:register bank0<br />Return:<br />     None<br />**************************************************/<br />void SwitchCFG(char _cfg)//1:Bank1 0:Bank0<br />{<br />unsigned char Tmp;<br /><br />Tmp=SPI_Read_Reg(STATUS);//Read the STATUS register<br />Tmp=Tmp&amp;0x80;//Mask only the RBANK bit<br />if( ( (Tmp)&amp;&amp;(_cfg==0) )<br />||( ((Tmp)==0)&amp;&amp;(_cfg) ) )//If bank isn't the same that is required, change it<br />{<br />SPI_Activate(ACTIVATE_CMD, 0x53);//sending the required command<br />}<br />}<br /><br />/**************************************************<br />Function: SetChannelNum();<br />Description:<br />set channel number<br /><br />**************************************************/<br />void SetChannelNum(unsigned char channel)<br />{<br />SPI_Write_Reg(WRITE_REG,RF_CH,channel);// Write the channel number which works on the RFM70<br />}<br /><br />/**************************************************<br />Function: Send_Packet<br />Description:<br />fill FIFO to send a packet<br />Parameter:<br />type: WR_TX_PLOAD or  W_TX_PAYLOAD_NOACK_CMD<br />pbuf: a buffer pointer<br />len: packet length<br />Return:<br />None<br />**************************************************/<br />void Send_Packet(RFM70_TRx_TypeDef type,unsigned char* pbuf,unsigned char len)<br />{<br />unsigned char fifo_sta;<br /><br />fifo_sta=SPI_Read_Reg(FIFO_STATUS);// read register FIFO_STATUS's value<br />if((fifo_sta&amp;FIFO_STATUS_TX_FULL)==0)//if not full, send data (write buff)<br />{<br />//GPIO_WriteHigh(GPIOA, GPIO_PIN_4);// RED LIGHT = 1SYGNALIZACJA !!!//FIXME: Jeżli potrzebna włączyć sygnalizację LEDem<br />SPI_Write_Buf(WRITE_REG, type, pbuf, len); // Writes data to buffer<br />delay_50ms();<br />//GPIO_WriteLow(GPIOA, GPIO_PIN_4);// RED LIGHT = 0SYGNALIZACJA !!!//FIXME: Jeżli potrzebna włączyć sygnalizację LEDem<br />delay_50ms();<br />}<br />}<br /><br />/**************************************************<br />Function: Receive_Packet<br />Description:<br />read FIFO to read a packet<br />Parameter:<br />None<br />Return:<br />None<br />**************************************************/<br /><br />void Receive_Packet(unsigned char *rx_buf)<br />{<br />unsigned char len,i,sta,fifo_sta;<br />//unsigned char rx_buf&#91;MAX_PACKET_LEN&#93;;<br />for(i = 0; i &lt; MAX_PACKET_LEN ; i++)rx_buf&#91;i&#93; = 0;// writing zeros to rx_buf<br />sta=SPI_Read_Reg(STATUS);// read register STATUS's value<br /><br />if((STATUS_RX_DR&amp;sta) == 0x40)// if receive data ready (RX_DR) interrupt<br />{<br />do<br />{<br />len=SPI_Read_Reg(R_RX_PL_WID_CMD);// read length of recived packet<br /><br />if(len&lt;=MAX_PACKET_LEN)<br />{<br />SPI_Read_Buf(RD_RX_PLOAD, rx_buf, len);// read receive payload from RX_FIFO buffer<br />}<br />else<br />{<br />SPI_Command(FLUSH_RX);//bad data reviced - flush Rx<br />}<br /><br />fifo_sta=SPI_Read_Reg(FIFO_STATUS);// read register FIFO_STATUS's value<br /><br />}while((fifo_sta&amp;FIFO_STATUS_RX_EMPTY)==0); //while not empty<br />}<br />SPI_Write_Reg(WRITE_REG, STATUS, sta);// clear RX_DR or TX_DS or MAX_RT interrupt flag<br />}<br /><br />void Ini_Bank0()<br />{<br />unsigned char i, j;// j-counter, i-variable<br /> unsigned char WriteArr&#91;12&#93;;<br />//unsigned char rx_buf_test&#91;MAX_PACKET_LEN&#93;;<br /><br />SwitchCFG(0);//switch to bank0<br /><br />for(j=0;j&lt;23;j++)//initialize RFM70 - REGISTERS<br />{<br />SPI_Write_Reg(WRITE_REG, Bank0_Reg&#91;j&#93;&#91;0&#93;, Bank0_Reg&#91;j&#93;&#91;1&#93;);<br />}<br /><br />for(j=0;j&lt;5;j++)//initialize RFM70 - PIPES (RX0)<br />{<br />WriteArr&#91;j&#93;=RX0_Address&#91;j&#93;;<br />}<br />SPI_Write_Buf(WRITE_REG, RX_ADDR_P0, &amp;(WriteArr&#91;0&#93;), 5);<br /><br />for(j=0;j&lt;5;j++)//initialize RFM70 - PIPES (RX1)<br />{<br />WriteArr&#91;j&#93;=RX1_Address&#91;j&#93;;<br />}<br />SPI_Write_Buf(WRITE_REG, RX_ADDR_P1, &amp;(WriteArr&#91;0&#93;), 5);<br /><br />for(j=0;j&lt;5;j++)// initialize RFM70 - TX_ADDR<br />{<br />WriteArr&#91;j&#93;=RX0_Address&#91;j&#93;;<br />}<br />SPI_Write_Buf(WRITE_REG, TX_ADDR, &amp;(WriteArr&#91;0&#93;), 5);<br /><br />i=SPI_Read_Reg(FEATURE);<br />if(i==0) // i!=0 showed that chip has been actived.so do not active again.<br />SPI_Activate(ACTIVATE_CMD,0x73); // Activate<br />for(j=22;j&gt;=21;j--)<br />{<br />SPI_Write_Reg(WRITE_REG, Bank0_Reg&#91;j&#93;&#91;0&#93;, Bank0_Reg&#91;j&#93;&#91;1&#93;); // Reinitialize the start value of DYNPD and FEATURE<br />}<br />}<br />void Ini_Bank1()<br />{<br />unsigned char j;<br /> unsigned char WriteArr&#91;12&#93;;<br /><br />SwitchCFG(1);<br />//reg:00<br />for(j=0; j&lt;4; j++)<br />{<br />WriteArr&#91;j&#93;=Bank1_Reg00&#91;j&#93;;<br />}<br />SPI_Write_Ini_Buf(WRITE_REG, A_00, &amp;(WriteArr&#91;0&#93;),4);<br />//reg:01<br />for(j=0; j&lt;4; j++)<br />{<br />WriteArr&#91;j&#93;=Bank1_Reg01&#91;j&#93;;<br />}<br />SPI_Write_Ini_Buf(WRITE_REG, A_01, &amp;(WriteArr&#91;0&#93;),4);<br />//reg:02<br />for(j=0; j&lt;4; j++)<br />{<br />WriteArr&#91;j&#93;=Bank1_Reg02&#91;j&#93;;<br />}<br />SPI_Write_Ini_Buf(WRITE_REG, A_02, &amp;(WriteArr&#91;0&#93;),4);<br />//reg:03<br />for(j=0; j&lt;4; j++)<br />{<br />WriteArr&#91;j&#93;=Bank1_Reg03&#91;j&#93;;<br />}<br />SPI_Write_Ini_Buf(WRITE_REG, A_03, &amp;(WriteArr&#91;0&#93;),4);<br />//reg:04<br />for(j=0; j&lt;4; j++)<br />{<br />WriteArr&#91;j&#93;=Bank1_Reg04&#91;j&#93;;<br />}<br />SPI_Write_Ini_Buf(WRITE_REG, A_04, &amp;(WriteArr&#91;0&#93;),4);<br />//reg:05<br />for(j=0; j&lt;4; j++)<br />{<br />WriteArr&#91;j&#93;=Bank1_Reg05&#91;j&#93;;<br />}<br />SPI_Write_Ini_Buf(WRITE_REG, A_05, &amp;(WriteArr&#91;0&#93;),4);<br />//reg:0C<br />for(j=0; j&lt;4; j++)<br />{<br />WriteArr&#91;j&#93;=Bank1_Reg0C&#91;j&#93;;<br />}<br />SPI_Write_Ini_Buf(WRITE_REG, A_0C, &amp;(WriteArr&#91;0&#93;),4);<br />//reg:0D<br />for(j=0; j&lt;4; j++)<br />{<br />WriteArr&#91;j&#93;=Bank1_Reg0D&#91;j&#93;;<br />}<br />SPI_Write_Ini_Buf(WRITE_REG, A_0D, &amp;(WriteArr&#91;0&#93;),4);<br />//reg:0E<br />for(j=0; j&lt;11; j++)<br />{<br />WriteArr&#91;j&#93;=Bank1_Reg0E&#91;j&#93;;<br />}<br />SPI_Write_Ini_Buf(WRITE_REG, A_0E, &amp;(WriteArr&#91;0&#93;),11);<br />}<br />/**************************************************/<br />void RFM70_Initialize()<br />{<br />delay_200ms();//delay more than 50ms.<br /><br />        Ini_Bank0();<br />Ini_Bank1();<br />delay_50ms();<br />SwitchCFG(0);//switch back to Bank0 register access<br />}<br /><br />/**************************************************         <br />Function: DelayMs();                                  <br /><br />Description:                                                <br />delay ms,please implement this function according to your MCU.<br />**************************************************/<br />void DelayMs(int ms)<br />{<br /><br /><br />}[/syntax]<br /><br />main.c<br />[syntax]/* Includes */<br />#include &lt;stddef.h&gt;<br />//include &quot;stm32f10x.h&quot;<br />#include &quot;RFM70.h&quot;<br /><br />#include &quot;stm32f0xx_cec.h&quot;<br />#include &quot;stm32f0xx_crc.h&quot;<br />#include &quot;stm32f0xx_comp.h&quot;<br />#include &quot;stm32f0xx_dac.h&quot;<br />//#include &quot;stm32f0xx_dbgmcu.h&quot;<br />#include &quot;stm32f0xx_dma.h&quot;<br />#include &quot;stm32f0xx_exti.h&quot;<br />#include &quot;stm32f0xx_flash.h&quot;<br />#include &quot;stm32f0xx_gpio.h&quot;<br />#include &quot;stm32f0xx_syscfg.h&quot;<br />#include &quot;stm32f0xx_i2c.h&quot;<br />#include &quot;stm32f0xx_iwdg.h&quot;<br />#include &quot;stm32f0xx_pwr.h&quot;<br />#include &quot;stm32f0xx_rcc.h&quot;<br />#include &quot;stm32f0xx_rtc.h&quot;<br />#include &quot;stm32f0xx_spi.h&quot;<br />#include &quot;stm32f0xx_tim.h&quot;<br />#include &quot;stm32f0xx_usart.h&quot;<br />#include &quot;stm32f0xx_wwdg.h&quot;<br />#include &quot;stm32f0xx_misc.h&quot;<br /><br /><br />/*      Global variables----------------------------------------------------------*/<br />const unsigned char tx_buf&#91;17&#93; =<br />{ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c,<br />0x3d, 0x3e, 0x3f, 0x78 };<br />unsigned char rx_buf&#91;MAX_PACKET_LEN&#93;;<br /><br />//#define MASTER1<br />#define SLAVE1<br /><br />//#define ZL31ARM1<br />#define STM32VL_DISCOVERY1<br /><br />#define true 1<br />#define false 0<br /><br />#ifdef ZL31ARM<br />#define LED_PORTGPIOB<br />#define LED_PINGPIO_Pin_1<br /><br />void LED_on(){ GPIO_ResetBits(LED_PORT,LED_PIN); }<br />void LED_off(){ GPIO_SetBits(LED_PORT,LED_PIN); }<br />#endif<br /><br />#ifdef STM32VL_DISCOVERY<br />#define LED_PORTGPIOC<br />#define LED_PINGPIO_Pin_9<br /><br />void LED_on(){ GPIO_SetBits(LED_PORT,LED_PIN); }<br />void LED_off(){ GPIO_ResetBits(LED_PORT,LED_PIN); }<br />#endif<br /><br />//Initialization<br />void Initialization(void);<br />void CLK_Configuration(void);<br />void SPI_Configuration(void);<br />void init_mcu(void);<br />void init_port(void);<br /><br />//Delays<br />void power_on_delay(void);<br />void delay_200ms(void);<br />void delay_50ms(void);<br />void delay_5ms(void);<br />void delay_1ms(void);<br />void sub_program(void);<br /><br />int main(void)<br />{<br /><br />#ifdef MASTER<br />unsigned char i, chksum;<br />unsigned char temp_buf&#91;32&#93;;<br />int tempo = 0;<br />unsigned char chktempo = false;<br />Initialization();<br /><br />RFM70_SwitchToTxMode();<br /><br />while (1)<br />{<br />for (i = 0; i &lt; 5; i++)<br />delay_200ms(); // 1 sec delay<br />for (i = 0; i &lt; 17; i++)<br />{<br />temp_buf&#91;i&#93; = tx_buf&#91;i&#93;; // write data from tx_buf -&gt; temp_buf, from where it will be sent<br />}<br />Send_Packet(W_TX_PAYLOAD_NOACK_CMD, temp_buf, 17);<br />//      -------------------------------------------------<br />RFM70_SwitchToRxMode();<br />for (i = 0; i &lt; tempo; i++)<br />delay_1ms();<br />Receive_Packet(rx_buf);<br /><br />if (rx_buf&#91;0&#93; != 0)<br />{<br />chktempo = true;<br />chksum = 0;<br />for (i = 0; i &lt; 16; i++)<br />{<br />chksum += rx_buf&#91;i&#93;;<br />}<br /><br />if (chksum == rx_buf&#91;16&#93; &amp;&amp; rx_buf&#91;0&#93; == 0x30) // 8 bit sum of the transmited packet &#91;16&#93;=0x3 78, &#91;0&#93;=0x30<br />{<br />LED_on();<br />delay_50ms();<br />delay_50ms();<br />LED_off();<br />}<br />}<br />if (chktempo == false)<br />tempo++;<br />RFM70_SwitchToTxMode();<br />}<br />#endif<br /><br />#ifdef SLAVE<br />int i;<br />unsigned char chksum, temp_buf&#91;32&#93;;<br />Initialization();<br />RFM70_SwitchToRxMode();<br /><br />while (1)<br />{<br />Receive_Packet(rx_buf);<br /><br />if (rx_buf&#91;0&#93; != 0)<br />{<br />chksum = 0;<br />for (i = 0; i &lt; 16; i++)<br />{<br />chksum += rx_buf&#91;i&#93;;<br />}<br /><br />if (chksum == rx_buf&#91;16&#93; &amp;&amp; rx_buf&#91;0&#93; == 0x30) // 8 bit sum of the transmited packet &#91;16&#93;=0x3 78, &#91;0&#93;=0x30<br />{<br />LED_on();<br />delay_50ms();<br />delay_50ms();<br />LED_off();<br /><br />RFM70_SwitchToTxMode();<br />//for(i = 0; i &lt; 5; i++)delay_50ms();   // 1 sec delay<br />for (i = 0; i &lt; 17; i++)<br />{<br />temp_buf&#91;i&#93; = tx_buf&#91;i&#93;; // write data from tx_buf -&gt; temp_buf, from where it will be sent<br />}<br />Send_Packet(W_TX_PAYLOAD_NOACK_CMD, temp_buf, 17);<br />}<br />RFM70_SwitchToRxMode();<br />}<br />}<br />#endif<br />}<br /><br />void Initialization()<br />{<br />CLK_Configuration();<br />init_mcu();<br />SPI_Configuration();<br />power_on_delay(); // delay for RFM70<br />RFM70_Initialize(); // RFM70 init - please look on RFM70.c<br />}<br /><br />/*********************************************************<br /> Function: CLK_Configuration();<br /><br /> Description:<br /> initialize mcu clock<br /> *********************************************************/<br />void CLK_Configuration(void)<br />{<br />  //Konfiguracja RCC (dołączenie do GPIOA oraz do SPI1)<br />  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);<br />  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);<br />  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC,ENABLE);<br />  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);<br />//  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);<br />}<br /><br />/*********************************************************<br /> Function: init_mcu();<br /><br /> Description:<br /> initialize mcu.<br /> *********************************************************/<br />void init_mcu(void)<br />{<br />init_port();<br />}<br />/*********************************************************<br /> Function: SPI_Configuration;<br /><br /> Description:<br /> configure SPI.<br /> *********************************************************/<br />void SPI_Configuration(void)<br />{<br />  //Struktury inicjalizacyjne<br />  SPI_InitTypeDef SPI_InitStructure;<br /><br />  //Konfiguracja SPI1<br />  SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;<br />  SPI_InitStructure.SPI_Mode=SPI_Mode_Master;<br />  SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;<br />  SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;<br />  SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;<br />  SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;<br />  SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_256;<br />  SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;<br /><br />  SPI_Init(SPI1,&amp;SPI_InitStructure);<br /><br />  SPI_Cmd(SPI1,ENABLE);<br />}<br /><br /><br /><br />/*********************************************************<br /> Function: init_port();<br /><br /> Description:<br /> initialize port.<br /> *********************************************************/<br /><br />void init_port(void)<br />{<br /><br />GPIO_InitTypeDef GPIO_InitStructure;<br /><br />  //PA4 - ChipSelect<br />  GPIO_InitStructure.GPIO_Pin=CSN_PIN;<br />  //GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;<br />  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;<br />  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;<br />  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;<br />  GPIO_Init(CSN_PORT,&amp;GPIO_InitStructure);<br /><br />  //PA4 - ChipEnable<br />  GPIO_InitStructure.GPIO_Pin=CE_PIN;<br />  //GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;<br />  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;<br />  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;<br />  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;<br />  GPIO_Init(CE_PORT,&amp;GPIO_InitStructure);<br /><br />  //PA5 - SCK<br />  GPIO_InitStructure.GPIO_Pin=SCK_PIN;<br />  //GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;<br />  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;<br />  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;<br />  GPIO_Init(SCK_PORT,&amp;GPIO_InitStructure);<br /><br />  //PA7 - MOSI<br />  GPIO_InitStructure.GPIO_Pin=MOSI_PIN;<br />  GPIO_Init(MOSI_PORT,&amp;GPIO_InitStructure);<br /><br />  //PA6 - MISO<br />  GPIO_InitStructure.GPIO_Pin=MISO_PIN;<br />  //GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;<br />  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;<br /><br />  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;<br />  GPIO_Init(MISO_PORT,&amp;GPIO_InitStructure);<br /><br />  //LED<br />  GPIO_InitStructure.GPIO_Pin=LED_PIN;<br />  //GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;<br />  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;<br />  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;<br />  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;<br />  GPIO_Init(LED_PORT,&amp;GPIO_InitStructure);<br />  LED_off();<br /><br />  //FIXME - czy przypadkiem nie korzysta z innych linii? (np. IRQ)<br />/*<br />GPIO_DeInit(GPIOA);<br />GPIO_DeInit(GPIOG);<br />GPIO_DeInit(GPIOD);<br />//RFM70 pins definition<br /><br />GPIO_Init(GPIOG, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST); // CSN chip select active low<br />GPIO_Init(GPIOG, GPIO_PIN_1, GPIO_MODE_IN_PU_IT); // IRQ - Maskable interrupt pin active low<br />GPIO_Init(GPIOA, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST); // CE (SPI master/slave)<br /><br />// Diodes on ports<br /><br />GPIO_Init(GPIOA, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST); // RED- Send<br />GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST); // GREEN- Receive<br /><br />//Initialized values<br />CE_Low();<br />CSN_High();<br />GPIO_WriteHigh(GPIOD, GPIO_PIN_0);//ustawienia LEDów<br />GPIO_WriteLow(GPIOA, GPIO_PIN_4);//ustawienia LEDów<br />*/<br />}<br /><br />/*********************************************************<br /> Function:  interrupt ISR_timer()<br /><br /> Description:<br /><br /> *********************************************************/<br />/*<br />@far @interrupt void TIM4_UPD_OVF_IRQHandler(void) // Interrupt of TIM4 ovf<br />{<br />unsigned char i;<br />//;<br />if (TIM4_GetFlagStatus(TIM4_IT_UPDATE) == SET)<br />{<br /><br />TIM4_ClearFlag(TIM4_FLAG_UPDATE);<br />}<br />}<br />*/<br />/*********************************************************<br /> Function:      power_on_delay()<br /><br /> Description:<br /> Delay for RFM70<br /> *********************************************************/<br />void power_on_delay(void)<br />{<br />unsigned int i;<br />for (i = 0; i &lt; 1000; i++)<br />{<br />delay_1ms();<br />}<br />}<br />/********************************************************<br /><br /> *********************************************************/<br />void delay_200ms(void)<br />{<br />unsigned char j;<br />for (j = 0; j &lt; 40; j++)<br />{<br />delay_5ms();<br />}<br />}<br />/*********************************************************<br /> Function: delay_50ms();<br /><br /> Description:<br /><br /> *********************************************************/<br />void delay_50ms(void)<br />{<br />unsigned char j;<br />for (j = 0; j &lt; 10; j++)<br />{<br />delay_5ms();<br />}<br />}<br />/*********************************************************<br /> Function: delay_5ms();<br /><br /> Description:<br /><br /> *********************************************************/<br />void delay_5ms(void)<br />{<br />int i;<br />for (i = 0; i &lt; 5; i++) // 85*5<br />{<br />delay_1ms();<br />}<br />}<br />/*********************************************************<br /> Function: delay_1ms();<br /><br /> Description:<br /><br /> *********************************************************/<br />void delay_1ms(void)<br />{<br />int i;<br />#ifdef ZL31ARM<br />for (i = 0; i &lt; 2200; i++)<br />#endif<br />#ifdef STM32VL_DISCOVERY<br />for (i = 0; i &lt; 1000; i++)<br />#endif<br />{<br />__NOP();<br />}<br />}<br /><br />//**********************************BLACKGK********************************************/<br /><br />#ifdef  USE_FULL_ASSERT<br /><br />/**<br /> * @brief  Reports the name of the source file and the source line number<br /> *   where the assert_param error has occurred.<br /> * @param  file: pointer to the source file name<br /> * @param  line: assert_param error line source number<br /> * @retval None<br /> */<br />void assert_failed(unsigned char* file, unsigned char line)<br />{<br />/* User can add his own implementation to report the file name and line number,<br /> ex: printf(&quot;Wrong parameters value: file %s on line %d\r\n&quot;, file, line) */<br /><br />/* Infinite loop */<br />while (1)<br />{<br />}<br />}<br />#endif<br /><br />/*<br /> * Minimal __assert_func used by the assert() macro<br /> * */<br />void __assert_func(const char *file, int line, const char *func,<br />const char *failedexpr)<br />{<br />while (1)<br />{<br />}<br />}<br /><br />/*<br /> * Minimal __assert() uses __assert__func()<br /> * */<br />void __assert(const char *file, int line, const char *failedexpr)<br />{<br />__assert_func(file, line, NULL, failedexpr);<br />}<br /><br />#ifdef USE_SEE<br />#ifndef USE_DEFAULT_TIMEOUT_CALLBACK<br />/**<br /> * @brief  Basic management of the timeout situation.<br /> * @param  None.<br /> * @retval sEE_FAIL.<br /> */<br />unsigned char sEE_TIMEOUT_UserCallback(void)<br />{<br />/* Return with error code */<br />return sEE_FAIL;<br />}<br />#endif<br />#endif /* USE_SEE */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1365">Jack88</a> — 2 cze 2013, o 01:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jack88]]></name></author>
<updated>2013-05-29T21:07:50+01:00</updated>
<published>2013-05-29T21:07:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=38010#p38010</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=38010#p38010"/>
<title type="html"><![CDATA[Re: [STM32F0][CooIDE] RFM73]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=38010#p38010"><![CDATA[
W porządku <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> - w takim razie czekam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1365">Jack88</a> — 29 maja 2013, o 21:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2013-05-29T14:26:46+01:00</updated>
<published>2013-05-29T14:26:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=37980#p37980</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=37980#p37980"/>
<title type="html"><![CDATA[Re: [STM32F0][CooIDE] RFM73]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=37980#p37980"><![CDATA[
Niebawem opiszę komunikację z modułami Hoperfa  uzbrój się w cierpliwość<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 29 maja 2013, o 14:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jack88]]></name></author>
<updated>2013-05-29T13:44:15+01:00</updated>
<published>2013-05-29T13:44:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=37968#p37968</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=37968#p37968"/>
<title type="html"><![CDATA[[STM32F0][CooIDE] RFM73]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3218&amp;p=37968#p37968"><![CDATA[
Witam<br /><br />Posiadam dwie płytki stm32f0 oraz moduły RFM73. Próbuje nawiązać pomiędzy nimi komunikacje - jednakże zatrzymałem się na etapie modyfikowania bibliotek dedykowanych dla modułu RFM70 i STM32VL Discovery. Czy jest ktoś w stanie pomóc mi w napisaniu tych bibliotek? Poniżej zamieszczam czyste biblioteki dla RFM70 oraz STM32VL Discovery oraz próbę moich modyfikacji. Dodatkowo zamieszczam biblioteki dla RFM73, ale dla procesora PIC16F690.<br /><br /><a href="http://speedy.sh/4d56f/RFM.7z"  class="postlink">POBIERZ</a><br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1365">Jack88</a> — 29 maja 2013, o 13:44</p><hr />
]]></content>
</entry>
</feed>