Narasimma DLN
/
NUCLEO_F091RC_IAP_UART
Sample IAP test code for Nucleo_F091RC
main.cpp@0:de2687a62a94, 2017-06-17 (annotated)
- Committer:
- narasimma23
- Date:
- Sat Jun 17 07:00:41 2017 +0000
- Revision:
- 0:de2687a62a94
Sample IAP test code for Nucleo_F091RC
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
narasimma23 | 0:de2687a62a94 | 1 | /** |
narasimma23 | 0:de2687a62a94 | 2 | * Author: Narasimma DLN |
narasimma23 | 0:de2687a62a94 | 3 | * Email: narasimma23@gmail.com |
narasimma23 | 0:de2687a62a94 | 4 | */ |
narasimma23 | 0:de2687a62a94 | 5 | |
narasimma23 | 0:de2687a62a94 | 6 | #include "mbed.h" |
narasimma23 | 0:de2687a62a94 | 7 | #include "stm_iap.h" |
narasimma23 | 0:de2687a62a94 | 8 | |
narasimma23 | 0:de2687a62a94 | 9 | #define BUFFER_LEN 4096 |
narasimma23 | 0:de2687a62a94 | 10 | |
narasimma23 | 0:de2687a62a94 | 11 | // Debug Serial Port |
narasimma23 | 0:de2687a62a94 | 12 | RawSerial pc(PB_3, PD_2); |
narasimma23 | 0:de2687a62a94 | 13 | DigitalOut led(PB_12); |
narasimma23 | 0:de2687a62a94 | 14 | |
narasimma23 | 0:de2687a62a94 | 15 | static uint8_t recBuf[BUFFER_LEN]; |
narasimma23 | 0:de2687a62a94 | 16 | static int recBufLen; |
narasimma23 | 0:de2687a62a94 | 17 | bool startProgram = false; |
narasimma23 | 0:de2687a62a94 | 18 | |
narasimma23 | 0:de2687a62a94 | 19 | /* Serial RX IRQ function */ |
narasimma23 | 0:de2687a62a94 | 20 | void serial_callback(void) |
narasimma23 | 0:de2687a62a94 | 21 | { |
narasimma23 | 0:de2687a62a94 | 22 | if (pc.readable()) { |
narasimma23 | 0:de2687a62a94 | 23 | //pc.putc(pc.getc()); |
narasimma23 | 0:de2687a62a94 | 24 | recBuf[recBufLen++] = pc.getc(); |
narasimma23 | 0:de2687a62a94 | 25 | |
narasimma23 | 0:de2687a62a94 | 26 | if (recBufLen == BUFFER_LEN) |
narasimma23 | 0:de2687a62a94 | 27 | startProgram = true; |
narasimma23 | 0:de2687a62a94 | 28 | } |
narasimma23 | 0:de2687a62a94 | 29 | } |
narasimma23 | 0:de2687a62a94 | 30 | |
narasimma23 | 0:de2687a62a94 | 31 | void processBuffer(void) |
narasimma23 | 0:de2687a62a94 | 32 | { |
narasimma23 | 0:de2687a62a94 | 33 | IAPCode ret; |
narasimma23 | 0:de2687a62a94 | 34 | uint32_t addr = 0x08000000; |
narasimma23 | 0:de2687a62a94 | 35 | |
narasimma23 | 0:de2687a62a94 | 36 | pc.printf("Processing Buffer...!\r\n"); |
narasimma23 | 0:de2687a62a94 | 37 | |
narasimma23 | 0:de2687a62a94 | 38 | // Testing Flash Erase |
narasimma23 | 0:de2687a62a94 | 39 | ret = erase_sector(addr); |
narasimma23 | 0:de2687a62a94 | 40 | pc.printf("Erasing the Sector: %x, ret: %d\r\n", addr, ret); |
narasimma23 | 0:de2687a62a94 | 41 | |
narasimma23 | 0:de2687a62a94 | 42 | // Testing Flash Program |
narasimma23 | 0:de2687a62a94 | 43 | ret = program_flash(addr, (uint16_t *)recBuf, FLASH_SECTOR_SIZE); |
narasimma23 | 0:de2687a62a94 | 44 | pc.printf("Flashing done: %d\r\n", ret); |
narasimma23 | 0:de2687a62a94 | 45 | |
narasimma23 | 0:de2687a62a94 | 46 | recBufLen = 0; |
narasimma23 | 0:de2687a62a94 | 47 | startProgram = false; |
narasimma23 | 0:de2687a62a94 | 48 | } |
narasimma23 | 0:de2687a62a94 | 49 | |
narasimma23 | 0:de2687a62a94 | 50 | int main(void) |
narasimma23 | 0:de2687a62a94 | 51 | { |
narasimma23 | 0:de2687a62a94 | 52 | uint8_t *ptr, ret; |
narasimma23 | 0:de2687a62a94 | 53 | uint32_t addr = FLASH_START_ADDR; |
narasimma23 | 0:de2687a62a94 | 54 | |
narasimma23 | 0:de2687a62a94 | 55 | pc.baud(115200); |
narasimma23 | 0:de2687a62a94 | 56 | pc.printf("NUCLEO_F092RC In-App Programming Test!\r\n"); |
narasimma23 | 0:de2687a62a94 | 57 | pc.attach(&serial_callback, Serial::RxIrq); |
narasimma23 | 0:de2687a62a94 | 58 | |
narasimma23 | 0:de2687a62a94 | 59 | pc.printf("FLASH SIZE = %d\r\n", get_flash_size()); |
narasimma23 | 0:de2687a62a94 | 60 | get_flash_sectors(); |
narasimma23 | 0:de2687a62a94 | 61 | |
narasimma23 | 0:de2687a62a94 | 62 | // Test Reading a byte from Flash |
narasimma23 | 0:de2687a62a94 | 63 | ptr = (uint8_t *)addr; |
narasimma23 | 0:de2687a62a94 | 64 | pc.printf("First byte: %x\r\n", ptr[1]); |
narasimma23 | 0:de2687a62a94 | 65 | |
narasimma23 | 0:de2687a62a94 | 66 | addr = FLASH_PAGE_SIZE; |
narasimma23 | 0:de2687a62a94 | 67 | pc.printf("FLASH_PAGE_SIZE: %d\r\n", addr); |
narasimma23 | 0:de2687a62a94 | 68 | |
narasimma23 | 0:de2687a62a94 | 69 | // Testing sector_number function and sector_size |
narasimma23 | 0:de2687a62a94 | 70 | addr = 0x08009000; |
narasimma23 | 0:de2687a62a94 | 71 | pc.printf("Get Sector No. for addr 0x%08x is: %d and size is: %d\r\n", addr, get_sector_number(addr), get_sector_size(addr)); |
narasimma23 | 0:de2687a62a94 | 72 | |
narasimma23 | 0:de2687a62a94 | 73 | // Testing Flash Erase |
narasimma23 | 0:de2687a62a94 | 74 | ret = erase_sector(addr); |
narasimma23 | 0:de2687a62a94 | 75 | pc.printf("Erase Sector: %d\r\n", ret); |
narasimma23 | 0:de2687a62a94 | 76 | |
narasimma23 | 0:de2687a62a94 | 77 | while(1) { |
narasimma23 | 0:de2687a62a94 | 78 | wait(1); |
narasimma23 | 0:de2687a62a94 | 79 | led = !led; |
narasimma23 | 0:de2687a62a94 | 80 | |
narasimma23 | 0:de2687a62a94 | 81 | pc.printf("Len: %d\r\n", recBufLen); |
narasimma23 | 0:de2687a62a94 | 82 | |
narasimma23 | 0:de2687a62a94 | 83 | if (startProgram) |
narasimma23 | 0:de2687a62a94 | 84 | processBuffer(); |
narasimma23 | 0:de2687a62a94 | 85 | } |
narasimma23 | 0:de2687a62a94 | 86 | } |