9 years, 10 months ago.

cannot send signal to rs232

I´ve a problem to put data to serial out and using spi-bus.

This programm makes error: The error-message is: "pinmap not found for peripheral"

**********************

// Reply to a SPI master as slave

 
#include "mbed.h"

 
SPISlave device(PA_5, PA_6, PA_7, PA_8); // mosi, miso, sclk, ssel

Serial pc(SERIAL_TX, SERIAL_RX);

 
int main() 
{

    int i=1;

    // device.reply(0x00);              // Prime SPI with first reply

    while(1) {

   /*     if(device.receive()) {

            int v = device.read();   // Read byte from master

            v = (v + 1) % 0x100;     // Add one to it, modulo 256

            device.reply(v);         // Make this the next reply 

        } */

    pc.printf ("throwline: %d", i++);

    }

    
}

*****************

When not using the line:

SPISlave device(PA_5, PA_6, PA_7, PA_8); mosi, miso, sclk, ssel

there is no longer this error.

I don´t understand errormessage "pinmap not found for peripheral" in this case.

This is part of enum in PinNames.h:

SERIAL_TX = PA_2, SERIAL_RX = PA_3, USBTX = PA_2, USBRX = PA_3, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, SPI_MISO = PA_6, SPI_SCK = PA_5,

Serial_TX and SERIAL_RX are not identical with PA_5-8 used for SPI-communication. What´s wrong in this example to combinate serial-communication with spi?

1 Answer

9 years, 10 months ago.

You have mixed up the pinnames for mosi and sck. Try

SPISlave device(PA_7, PA_6, PA_5, PA_4);

Please use <<code>> and <</code>> tags around your posted code to keep it readable.

Accepted Answer

Thanks for your help. Ive taken the items from spi-slave-example from web, there´s wrong order , i´ve changed to your example but it also didnt succed. I can only use SPISlave or Serial. Using them together will not succed :-(

Now I tried this:

/// Reply to a SPI master as slave
 
 
#include "mbed.h"
 
 
SPISlave device(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS); // mosi, miso, sclk, ssel
 
Serial pc(SERIAL_TX, SERIAL_RX);
 
 
int main() 
{
 
    int i=1;
 
    // device.reply(0x00);              // Prime SPI with first reply
 
    while(1) {
 
   /*     if(device.receive()) 
          {
 
            int v = device.read();   // Read byte from master
 
            v = (v + 1) % 0x100;     // Add one to it, modulo 256
 
            device.reply(v);         // Make this the next reply 
 
        } */
 
    pc.printf ("throwline: %d", i++);
 
    }
 
    
}

I´ve changed PB_7 to SPI_MOSI and so on, it´s impossible to combinate serial and spiSlave :-(

Now I tried using spi as master and serial:

/// Reply to a SPI master as slave
 
 
#include "mbed.h"
 
 
// SPISlave device(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS); // mosi, miso, sclk, ssel
SPI myspi (SPI_MOSI, SPI_MISO, SPI_SCK);
 
Serial pc(SERIAL_TX, SERIAL_RX);
 
 
int main() 
{
...

There´s no problem when using spi as master. but I´d like to use as slave. Is there problem with chipselect pin? Or are there internal problems like using the same interrupts for rxd in serial and cs in spi-mode?

posted by Papp Nase 02 Jan 2015

According to the platform pinout schematic for the F103 the CS pin for the SPI slave should be at PA_4 or PA_15 in case you use SPI1. Try the modified code above.

posted by Wim Huiskamp 02 Jan 2015