test gpio and access low level arm registers

Dependencies:   libmDot mbed-rtos mbed

main.cpp

Committer:
boddeke
Date:
2016-05-26
Revision:
0:111cba7b0520

File content as of revision 0:111cba7b0520:

#include "mbed.h"
#include "rtos.h"
#include "mDot.h"


#define GPIO_PORT   PA_0

RawSerial pc(PA_2,NC);

// results:
//              default  pullup  pulldown  pullnone  open drain
// battery + close 0.00    0.00      0.00      0.00        0.00
// battery + open  1.55    3.01      0.01  drifting    drifting
// mdk + open      0.00    0.00      0.00      0.00        0.00
// mdk + close     3.30    3.21      2.26      3.12        3.30
//
// conclusion: mdk has something connected to PA_0

// https://developer.mbed.org/users/n0tform3/code/HelloWorld_IKS01A1/docs/1c6281289d67/stm32f4xx_8h_source.html


void print_gpio_pa0_config(void) {

        pc.printf("MODER %x\r\n",GPIOA->MODER&0x3);
        pc.printf("OTYPER %x\r\n",GPIOA->OTYPER&0x1);
        pc.printf("OSPEEDR %x\r\n",GPIOA->OSPEEDR&0x3);
        pc.printf("PUPDR %x\r\n",GPIOA->PUPDR&0x3);
        pc.printf("IDR %x\r\n",GPIOA->IDR&0x1);
        pc.printf("ODR %x\r\n",GPIOA->ODR&0x1);
        pc.printf("BSRR %x\r\n",GPIOA->BSRR&0x1);
        pc.printf("LCKR %x\r\n",GPIOA->LCKR&0x1);
        pc.printf("AFR[0] %x\r\n",GPIOA->AFR[0]&0xf);
}
    
main() {
    
   pc.baud(115200);
    
    pc.printf("Build: " __DATE__ ", " __TIME__"\r\n");
    
    DigitalIn gpio_sensor(GPIO_PORT);
    pc.printf("pin mode: default\r\n");
    print_gpio_pa0_config();
    wait(10);
    
    // uint32_t lock = GPIOA->LCKR;
    // pc.printf("Read %x\r\n",lock);
    
    while(1) {
         
         gpio_sensor.mode(PullUp);
         pc.printf("pin mode: pullup\r\n");
         print_gpio_pa0_config();
         wait(10);
        
         gpio_sensor.mode(PullDown);
         pc.printf("pin mode: pulldown\r\n");
         print_gpio_pa0_config();
         wait(10);
         
         gpio_sensor.mode(PullNone);
         pc.printf("pin mode: pullnone\r\n");
         print_gpio_pa0_config();
         wait(10);
         
         gpio_sensor.mode(OpenDrain);
         pc.printf("pin mode: opendrain\r\n");
         print_gpio_pa0_config();
         wait(10);
    }
}