Nucleo F303K8 framework with fast pwm and serial manager

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
django
Date:
Wed Aug 09 03:04:28 2017 +0000
Commit message:
NUCLEO F303 SerialHandler with PWM in work

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 80d3786005bd main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Aug 09 03:04:28 2017 +0000
@@ -0,0 +1,151 @@
+//******************************************************************************************
+//  Verison : 1.0.0.0   9.8.2017    Startversion
+
+//***************** INCLUDES ***************************************************************
+#include "mbed.h"
+#include "string.h"
+
+//***************** PROTOTYPES *************************************************************
+void pc_isr();
+void parse_pc(char*);
+void MyTicker_isr();
+
+//***************** HARDWARE RECOURCES *****************************************************
+
+Ticker MyTicker;
+
+DigitalOut led1(LED1);
+Serial pc(USBTX, USBRX);    // tx, rx
+//Serial Gps(A7,A2);        // tx, rx
+Serial Remote(D1,D0);       // tx, rx
+PwmOut Mypwm0(D3);
+PwmOut Mypwm1(D6);
+AnalogIn Is_1(A0);
+AnalogIn Is_2(A1);
+AnalogIn T_2(A3);
+AnalogIn T_1(A4);
+AnalogIn Poti(A5);
+AnalogIn V_Supp(A6);
+
+DigitalOut Myled(LED1);
+DigitalOut Mode0(D10);
+DigitalOut RunStop_1(D5);
+DigitalOut RunStop_2(D4);
+DigitalOut Ext_Sup(D2);
+DigitalIn  Taster(D11);
+
+void pc_isr();
+void parse_pc(char*);
+
+//***************** GLOBAL VARIABLES *******************************************************
+#define RX_BUFFER_PC_SIZE 255
+char rx_buffer_pc[RX_BUFFER_PC_SIZE] = {' '};
+char stringcopy_isr_pc[RX_BUFFER_PC_SIZE] = {' '};
+char stringcopy_pc[RX_BUFFER_PC_SIZE] = {' '};
+int  rx_buffer_pc_poi = 0;
+bool stringComplete_pc = false;  // whether the string is complete
+char c;
+
+//***************** THE MAIN PROGRAM ******************************************************* 
+int main() {
+//***************** INIT ******************************************************************* 
+    float meas;    
+//**************** Setup ***************  
+    MyTicker.attach(&MyTicker_isr, 0.2);
+    Remote.baud(115200);
+    pc.baud(115200);  
+    Remote.printf("Hello World Remote\n");
+    pc.printf("Hello World PC\n");
+    HAL_Delay(200);
+    Mypwm0.period_us(100);
+    Mypwm0.pulsewidth_us(2);
+    Mypwm1.period_us(100);
+    Mypwm1.pulsewidth_us(1);
+    Ext_Sup = 0;
+    RunStop_1 = 1;
+    RunStop_2 = 1;
+    Mode0 = 0;
+    Myled = 0;
+    Myled = !Myled;
+    wait(0.5);
+    Myled = !Myled;
+    pc.attach(&pc_isr);
+//**************** MAIN LOOP ***************************************************************      
+    while(1) {
+ /*       if (stringComplete_pc)                       //  set in interrupt
+            {
+            strncpy(stringcopy_pc, stringcopy_isr_pc, (unsigned)strlen(stringcopy_isr_pc));  
+            parse_pc(stringcopy_pc);                 //  handle it and respond
+            stringComplete_pc = false;               // reset
+            Myled = !Myled;
+            }  */       
+        meas = Poti.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
+        meas = meas * 3300; // Change the value to be in the 0 to 3300 range
+        Remote.printf("Poti = %.0f mV\n", meas);
+        wait(1);
+        meas = V_Supp.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
+        meas = meas * 3300; // Change the value to be in the 0 to 3300 range
+        meas = (meas * 110.0f) / (float)10.0f;
+        meas /= 1000.0f;
+        meas *= 1.02f;
+        meas -= 0.02f;
+        Remote.printf("V_Supp = %.02f V\n", meas);
+        wait(1);       
+        Ext_Sup = !Ext_Sup;
+    }
+}
+
+
+//***************** PARSING PC COMMAND ******************************************************
+
+void parse_pc(char* stringcopy)
+{ 
+char cmd;
+
+if (stringcopy_pc[0] != '#')
+  {
+  pc.printf("@Syntax Error\r\n");
+  return;
+  } 
+cmd = stringcopy_pc[1];  
+switch(cmd)
+  {
+// Testing ....
+    case 'v': pc.printf("Hello world ! v ! \r\n");
+    break;            
+    case 'a': pc.printf("Hello world ! a ! \r\n");
+    break;
+    }
+ }
+
+
+//***************** PC ISR *****************************************************************
+void pc_isr() {
+    if (pc.readable()) {
+       do {
+            c = pc.getc();
+            rx_buffer_pc[rx_buffer_pc_poi] = c;
+            rx_buffer_pc_poi++;
+            if (c == '\n')
+                {
+                stringComplete_pc = true;
+                strncpy(stringcopy_isr_pc, rx_buffer_pc, rx_buffer_pc_poi);
+                rx_buffer_pc_poi=0;
+                }
+        }
+        while (rx_buffer_pc_poi < RX_BUFFER_PC_SIZE && (c != '\n') && pc.readable());
+    }
+}
+
+//***************** TICKER ISR MyTICKER ****************************************************
+void MyTicker_isr()
+{
+   if (stringComplete_pc)                       //  set in interrupt
+      {
+      strncpy(stringcopy_pc, stringcopy_isr_pc, (unsigned)strlen(stringcopy_isr_pc));  
+      parse_pc(stringcopy_pc);                 //  handle it and respond
+      stringComplete_pc = false;               // reset
+      }  
+   Myled = !Myled; 
+}
+//***************** THE END **************************************************************** 
\ No newline at end of file
diff -r 000000000000 -r 80d3786005bd mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Aug 09 03:04:28 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/2241e3a39974
\ No newline at end of file