![](/media/cache/group/CC_logo_rot.png.50x50_q85.png)
PWM output with serial
Dependencies: mbed
main.cpp@0:9e52247c0dd2, 2015-04-20 (annotated)
- Committer:
- dousape2
- Date:
- Mon Apr 20 22:22:37 2015 +0000
- Revision:
- 0:9e52247c0dd2
- Child:
- 1:dff553988426
a
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dousape2 | 0:9e52247c0dd2 | 1 | /********************************************************************************** |
dousape2 | 0:9e52247c0dd2 | 2 | * @file main.cpp |
dousape2 | 0:9e52247c0dd2 | 3 | * @author Petr Dousa |
dousape2 | 0:9e52247c0dd2 | 4 | * @version V1.00 |
dousape2 | 0:9e52247c0dd2 | 5 | * @date 30-March-2015 |
dousape2 | 0:9e52247c0dd2 | 6 | * @brief Every 1 second blink LED and on PB_3 generate PWM |
dousape2 | 0:9e52247c0dd2 | 7 | * Serial speed is set to 115200. |
dousape2 | 0:9e52247c0dd2 | 8 | ***********************************************************************************/ |
dousape2 | 0:9e52247c0dd2 | 9 | |
dousape2 | 0:9e52247c0dd2 | 10 | /**********************************************************************************/ |
dousape2 | 0:9e52247c0dd2 | 11 | /* Table of PWM pins on Nucleo F303 (LQFP64) */ |
dousape2 | 0:9e52247c0dd2 | 12 | /**********************************************************************************/ |
dousape2 | 0:9e52247c0dd2 | 13 | /* LQFP64 pin | Nucleo pin | ST Pin | PWM number | Channel */ |
dousape2 | 0:9e52247c0dd2 | 14 | /* 15 | A1 | PA_1 | PWM15 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 15 | /* 26 | A3 | PB_0 | PWM1 | 2 */ |
dousape2 | 0:9e52247c0dd2 | 16 | /* 9 | A4 | PC_1 | PWM1 | 2 */ |
dousape2 | 0:9e52247c0dd2 | 17 | /* 8 | A5 | PC_0 | PWM1 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 18 | /* 17 | D0 | PA_3 | PWM15 | 2 */ |
dousape2 | 0:9e52247c0dd2 | 19 | /* 16 | D1 | PA_2 | PWM15 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 20 | /* 43 | D2 | PA_10 | PWM1 | 3 */ |
dousape2 | 0:9e52247c0dd2 | 21 | /* 55 | D3 | PB_3 | PWM8 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 22 | /* 57 | D4 | PB_5 | PWM17 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 23 | /* 56 | D5 | PB_4 | PWM16 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 24 | /* 41 | D7 | PA_8 | PWM1 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 25 | /* 42 | D8 | PA_9 | PWM1 | 2 */ |
dousape2 | 0:9e52247c0dd2 | 26 | /* 38 | D9 | PC_7 | PWM3 | 2 */ |
dousape2 | 0:9e52247c0dd2 | 27 | /* 58 | D10 | PB_6 | PWM16 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 28 | /* 23 | D11 | PA_7 | PWM15 | 2 */ |
dousape2 | 0:9e52247c0dd2 | 29 | /* 22 | D12 | PA_6 | PWM15 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 30 | /* 62 | D14 | PB_9 | PWM17 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 31 | /* 61 | D15 | PB_8 | PWM16 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 32 | /* 46 | | PA_13 | PWM16 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 33 | /* 49 | | PA_14 | PWM8 | 2 */ |
dousape2 | 0:9e52247c0dd2 | 34 | /* 59 | | PB_7 | PWM17 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 35 | /* 2 | | PC_13 | PWM1 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 36 | /* 10 | | PC_2 | PWM1 | 3 */ |
dousape2 | 0:9e52247c0dd2 | 37 | /* 11 | | PC_3 | PWM1 | 4 */ |
dousape2 | 0:9e52247c0dd2 | 38 | /* 40 | | PC_9 | PWM3 | 4 */ |
dousape2 | 0:9e52247c0dd2 | 39 | /* 39 | | PC_8 | PWM3 | 3 */ |
dousape2 | 0:9e52247c0dd2 | 40 | /* 37 | | PC_6 | PWM3 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 41 | /* 45 | | PA_12 | PWM16 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 42 | /* 44 | | PA_11 | PWM1 | 4 */ |
dousape2 | 0:9e52247c0dd2 | 43 | /* 27 | | PB_1 | PWM1 | 3 */ |
dousape2 | 0:9e52247c0dd2 | 44 | /* 36 | | PB_15 | PWM17 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 45 | /* 35 | | PB_14 | PWM16 | 1 */ |
dousape2 | 0:9e52247c0dd2 | 46 | /**********************************************************************************/ |
dousape2 | 0:9e52247c0dd2 | 47 | |
dousape2 | 0:9e52247c0dd2 | 48 | /* Includes ----------------------------------------------------------------------*/ |
dousape2 | 0:9e52247c0dd2 | 49 | #include "mbed.h" |
dousape2 | 0:9e52247c0dd2 | 50 | |
dousape2 | 0:9e52247c0dd2 | 51 | /* Defines -----------------------------------------------------------------------*/ |
dousape2 | 0:9e52247c0dd2 | 52 | /* Function prototypes -----------------------------------------------------------*/ |
dousape2 | 0:9e52247c0dd2 | 53 | /* Variables ---------------------------------------------------------------------*/ |
dousape2 | 0:9e52247c0dd2 | 54 | //mbed - initialization of peripherals |
dousape2 | 0:9e52247c0dd2 | 55 | Serial pc(SERIAL_TX, SERIAL_RX); |
dousape2 | 0:9e52247c0dd2 | 56 | DigitalOut my_led(LED1); // blink LED |
dousape2 | 0:9e52247c0dd2 | 57 | PwmOut my_pwm(PB_3); // PWM output |
dousape2 | 0:9e52247c0dd2 | 58 | /* Functions----------------------------------------------------------------------*/ |
dousape2 | 0:9e52247c0dd2 | 59 | |
dousape2 | 0:9e52247c0dd2 | 60 | |
dousape2 | 0:9e52247c0dd2 | 61 | |
dousape2 | 0:9e52247c0dd2 | 62 | /*********************************************************************************** |
dousape2 | 0:9e52247c0dd2 | 63 | * Function Name : flushSerialPort. |
dousape2 | 0:9e52247c0dd2 | 64 | * Description : Serial flush rountine. |
dousape2 | 0:9e52247c0dd2 | 65 | * Input : None. |
dousape2 | 0:9e52247c0dd2 | 66 | * Output : None. |
dousape2 | 0:9e52247c0dd2 | 67 | * Return : None. |
dousape2 | 0:9e52247c0dd2 | 68 | ***********************************************************************************/ |
dousape2 | 0:9e52247c0dd2 | 69 | void flushSerialPort() |
dousape2 | 0:9e52247c0dd2 | 70 | { |
dousape2 | 0:9e52247c0dd2 | 71 | while(pc.readable()) |
dousape2 | 0:9e52247c0dd2 | 72 | pc.getc(); |
dousape2 | 0:9e52247c0dd2 | 73 | return; |
dousape2 | 0:9e52247c0dd2 | 74 | } |
dousape2 | 0:9e52247c0dd2 | 75 | |
dousape2 | 0:9e52247c0dd2 | 76 | /*********************************************************************************** |
dousape2 | 0:9e52247c0dd2 | 77 | * Function Name : menu. |
dousape2 | 0:9e52247c0dd2 | 78 | * Description : Print menu to serial. |
dousape2 | 0:9e52247c0dd2 | 79 | * Input : None. |
dousape2 | 0:9e52247c0dd2 | 80 | * Output : None. |
dousape2 | 0:9e52247c0dd2 | 81 | * Return : None. |
dousape2 | 0:9e52247c0dd2 | 82 | ***********************************************************************************/ |
dousape2 | 0:9e52247c0dd2 | 83 | void menu() |
dousape2 | 0:9e52247c0dd2 | 84 | { |
dousape2 | 0:9e52247c0dd2 | 85 | while(!pc.writeable()); // wait to be serial available for sending data |
dousape2 | 0:9e52247c0dd2 | 86 | pc.printf("HELP - MENU\n");// send text to serial |
dousape2 | 0:9e52247c0dd2 | 87 | while(!pc.writeable()); |
dousape2 | 0:9e52247c0dd2 | 88 | pc.printf("Set data exactly.\n"); |
dousape2 | 0:9e52247c0dd2 | 89 | while(!pc.writeable()); |
dousape2 | 0:9e52247c0dd2 | 90 | pc.printf("Write to console: \"xx yy\", where xx is a code of seting and yy his value.\n"); |
dousape2 | 0:9e52247c0dd2 | 91 | while(!pc.writeable()); |
dousape2 | 0:9e52247c0dd2 | 92 | pc.printf("01 yyy - set up duty-cycle from 0 to 100, example:01 80\n"); |
dousape2 | 0:9e52247c0dd2 | 93 | while(!pc.writeable()); |
dousape2 | 0:9e52247c0dd2 | 94 | pc.printf("02 yyyyy - set up period in ms from 0 to 10000 , example:02 10\n"); |
dousape2 | 0:9e52247c0dd2 | 95 | while(!pc.writeable()); |
dousape2 | 0:9e52247c0dd2 | 96 | pc.printf("end HELP\n"); |
dousape2 | 0:9e52247c0dd2 | 97 | } |
dousape2 | 0:9e52247c0dd2 | 98 | |
dousape2 | 0:9e52247c0dd2 | 99 | /*********************************************************************************** |
dousape2 | 0:9e52247c0dd2 | 100 | * Function Name : main. |
dousape2 | 0:9e52247c0dd2 | 101 | * Description : Main rountine. |
dousape2 | 0:9e52247c0dd2 | 102 | * Input : None. |
dousape2 | 0:9e52247c0dd2 | 103 | * Output : None. |
dousape2 | 0:9e52247c0dd2 | 104 | * Return : None. |
dousape2 | 0:9e52247c0dd2 | 105 | ***********************************************************************************/ |
dousape2 | 0:9e52247c0dd2 | 106 | int main() |
dousape2 | 0:9e52247c0dd2 | 107 | { |
dousape2 | 0:9e52247c0dd2 | 108 | int prijData=0; |
dousape2 | 0:9e52247c0dd2 | 109 | int Data1=0; |
dousape2 | 0:9e52247c0dd2 | 110 | int Data2=0; |
dousape2 | 0:9e52247c0dd2 | 111 | |
dousape2 | 0:9e52247c0dd2 | 112 | pc.baud(115200); |
dousape2 | 0:9e52247c0dd2 | 113 | pc.printf("\nLogic sond.\n"); |
dousape2 | 0:9e52247c0dd2 | 114 | menu(); //print menu |
dousape2 | 0:9e52247c0dd2 | 115 | // Set PWM |
dousape2 | 0:9e52247c0dd2 | 116 | my_pwm.period_ms(10); |
dousape2 | 0:9e52247c0dd2 | 117 | my_pwm.write(0.5); |
dousape2 | 0:9e52247c0dd2 | 118 | |
dousape2 | 0:9e52247c0dd2 | 119 | while(1) { |
dousape2 | 0:9e52247c0dd2 | 120 | //accepted data from serial |
dousape2 | 0:9e52247c0dd2 | 121 | prijData=pc.scanf("%d",&Data1); // read number from serial |
dousape2 | 0:9e52247c0dd2 | 122 | if(prijData==1 && (Data1>=1 && Data1<=2)) { // test if number was read and it is between 1 and 2 |
dousape2 | 0:9e52247c0dd2 | 123 | prijData=pc.scanf("%d",&Data2); // read int number from serial |
dousape2 | 0:9e52247c0dd2 | 124 | if(prijData==1 && Data2<=100 && Data2>=0 && Data1==1) { |
dousape2 | 0:9e52247c0dd2 | 125 | prijData=2; // set variable to 2 - parse data |
dousape2 | 0:9e52247c0dd2 | 126 | } else if(prijData==1 && Data2>=0 && Data2<=10000 && Data1==2) { |
dousape2 | 0:9e52247c0dd2 | 127 | prijData=2; // set variable to 2 - parse data |
dousape2 | 0:9e52247c0dd2 | 128 | } else { |
dousape2 | 0:9e52247c0dd2 | 129 | flushSerialPort(); // discard data from serial |
dousape2 | 0:9e52247c0dd2 | 130 | prijData=0; // set variable to print menu |
dousape2 | 0:9e52247c0dd2 | 131 | } |
dousape2 | 0:9e52247c0dd2 | 132 | } else { |
dousape2 | 0:9e52247c0dd2 | 133 | flushSerialPort(); // discard data from serial |
dousape2 | 0:9e52247c0dd2 | 134 | prijData=0; // set variable to print menu |
dousape2 | 0:9e52247c0dd2 | 135 | } |
dousape2 | 0:9e52247c0dd2 | 136 | |
dousape2 | 0:9e52247c0dd2 | 137 | if(prijData==2) { |
dousape2 | 0:9e52247c0dd2 | 138 | if(Data1==1) { |
dousape2 | 0:9e52247c0dd2 | 139 | my_pwm.write((double)Data2/(double)100); //set duty-cycle |
dousape2 | 0:9e52247c0dd2 | 140 | } else if(Data1==2) { |
dousape2 | 0:9e52247c0dd2 | 141 | my_pwm.period_ms(Data2); // set period in ms |
dousape2 | 0:9e52247c0dd2 | 142 | } |
dousape2 | 0:9e52247c0dd2 | 143 | } else { |
dousape2 | 0:9e52247c0dd2 | 144 | menu(); //print menu |
dousape2 | 0:9e52247c0dd2 | 145 | pc.printf("\n Bad data.\n"); |
dousape2 | 0:9e52247c0dd2 | 146 | flushSerialPort(); // discard data from serial |
dousape2 | 0:9e52247c0dd2 | 147 | } |
dousape2 | 0:9e52247c0dd2 | 148 | } |
dousape2 | 0:9e52247c0dd2 | 149 | } |