[其他ST产品] STM32G070RBT6基于Arduino串口的使用

[复制链接]
 楼主| 远芳侵古道 发表于 2023-11-29 15:20 | 显示全部楼层 |阅读模式
STM32G070RBT6基于Arduino串口的使用

STM32G070RBT6串口资源介绍
STM32G070RBT6总共有4个USART资源。
Serial1 for USART1
Serial2 for USART2
Serial3 for USART3
Serial4 for UART4
1
2
3
4
默认情况下,只有一个Serialx实例映射到通用Serial名。对于STM32G070RBT6而言,映射的管脚为:PA1和PA0。

在C:\Users\Administrator\AppData\Local\Arduino15\packages\STMicroelectronics\hardware\stm32\2.3.0\variants\STM32G0xx\G070RBT\variant_generic.h中可以找到相关定义:
// Default pin used for generic 'Serial' instance
// Mandatory for Firmata
#ifndef PIN_SERIAL_RX
  #define PIN_SERIAL_RX         PA1      
#endif
#ifndef PIN_SERIAL_TX
  #define PIN_SERIAL_TX         PA0      
#endif


 楼主| 远芳侵古道 发表于 2023-11-29 15:21 | 显示全部楼层
默认串口使用示例1
  1. #define led1  PC2
  2. #define led2  PC3

  3. #define button1  PC0
  4. #define button2  PC1

  5. // the setup function runs once when you press reset or power the board
  6. void setup() {
  7.   Serial.begin(115200);//默认串口1的输出管脚:PA0 PA1。
  8.   // initialize digital pin LED_BUILTIN as an output.
  9.   pinMode(led1, OUTPUT);
  10.    pinMode(led2, OUTPUT);
  11.    digitalWrite(led1, LOW);
  12.    digitalWrite(led2, HIGH);
  13.      pinMode(button1, INPUT_PULLUP);
  14.    pinMode(button2, INPUT_PULLUP);

  15. }

  16. // the loop function runs over and over again forever
  17. void loop() {
  18. digitalToggleFast(PC_2);   // turn the LED on (HIGH is the voltage level)
  19.   digitalToggle(led2);
  20.   delay(1000);                       // wait for a second
  21.   Serial.println("Perseverance51");
  22.   digitalWriteFast(PC_2, !digitalReadFast(PC_2)) ;   // turn the LED off by making the voltage LOW
  23.   digitalWrite(led2, !digitalRead(led2)) ;
  24.   delay(1000);                       // wait for a second
  25.   Serial.println("Arduino STM32G070RBT6");
  26. }
 楼主| 远芳侵古道 发表于 2023-11-29 15:27 | 显示全部楼层
串口1指定到管脚使用示例2
需要注意实例化串口对象需要加数字编号:HardwareSerial Serialx(PA10, PA9);//将Serialx(x=1-4)串口x的管脚.不能实例化默认的串口:HardwareSerial Serial(PA10, PA9);,一定要带编号:Serialx

//                      RX    TX
HardwareSerial Serial1(PA10, PA9);//将串口1的管脚指定到PA10,PA9引脚上

// the setup function runs once when you press reset or power the board
void setup() {
  Serial1.begin(115200);
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(led1, OUTPUT);
   pinMode(led2, OUTPUT);
   digitalWrite(led1, LOW);
   digitalWrite(led2, HIGH);
     pinMode(button1, INPUT_PULLUP);
   pinMode(button2, INPUT_PULLUP);

}

// the loop function runs over and over again forever
void loop() {
digitalToggleFast(PC_2);   // turn the LED on (HIGH is the voltage level)
  digitalToggle(led2);
  delay(1000);                       // wait for a second
  Serial1.println("Perseverance51");
  digitalWriteFast(PC_2, !digitalReadFast(PC_2)) ;   // turn the LED off by making the voltage LOW
  digitalWrite(led2, !digitalRead(led2)) ;
  delay(1000);                       // wait for a second
  Serial1.println("Arduino STM32G070RBT6");
}
 楼主| 远芳侵古道 发表于 2023-11-29 15:27 | 显示全部楼层
将串口1复用到PC4和PC5引脚上
980946566e7f26ab1e.png
 楼主| 远芳侵古道 发表于 2023-11-29 15:33 | 显示全部楼层
示例4
  1. #define led1  PC2
  2. #define led2  PC3

  3. #define button1  PC0
  4. #define button2  PC1

  5. //                     RX    TX
  6. HardwareSerial Serial1(PC5, PC4);

  7. // the setup function runs once when you press reset or power the board
  8. void setup() {
  9. //  HardwareSerial(PA10, PA9);
  10.   Serial1.begin(115200);
  11.   // initialize digital pin LED_BUILTIN as an output.
  12.   pinMode(led1, OUTPUT);
  13.    pinMode(led2, OUTPUT);
  14.    digitalWrite(led1, LOW);
  15.    digitalWrite(led2, HIGH);
  16.      pinMode(button1, INPUT_PULLUP);
  17.    pinMode(button2, INPUT_PULLUP);

  18. }

  19. // the loop function runs over and over again forever
  20. void loop() {
  21. digitalToggleFast(PC_2);   // turn the LED on (HIGH is the voltage level)
  22.   digitalToggle(led2);
  23.   delay(1000);                       // wait for a second
  24.   Serial1.println("Perseverance51");
  25.   digitalWriteFast(PC_2, !digitalReadFast(PC_2)) ;   // turn the LED off by making the voltage LOW
  26.   digitalWrite(led2, !digitalRead(led2)) ;
  27.   delay(1000);                       // wait for a second
  28.   Serial1.println("Arduino STM32G070RBT6");
  29. }
 楼主| 远芳侵古道 发表于 2023-11-29 15:34 | 显示全部楼层
将串口1复用到PB7和PB6引脚上

78946566e99384363.png
 楼主| 远芳侵古道 发表于 2023-11-29 15:34 | 显示全部楼层
示例5
  1. #define led1  PC2
  2. #define led2  PC3

  3. #define button1  PC0
  4. #define button2  PC1

  5. //                     RX    TX
  6. HardwareSerial Serial1(PB7, PB6);将Serialx(x=1-4)串口x的管脚指定

  7. // the setup function runs once when you press reset or power the board
  8. void setup() {

  9.   Serial1.begin(115200);
  10.   // initialize digital pin LED_BUILTIN as an output.
  11.   pinMode(led1, OUTPUT);
  12.    pinMode(led2, OUTPUT);
  13.    digitalWrite(led1, LOW);
  14.    digitalWrite(led2, HIGH);
  15.      pinMode(button1, INPUT_PULLUP);
  16.    pinMode(button2, INPUT_PULLUP);

  17. }

  18. // the loop function runs over and over again forever
  19. void loop() {
  20. digitalToggleFast(PC_2);   // turn the LED on (HIGH is the voltage level)
  21.   digitalToggle(led2);
  22.   delay(1000);                       // wait for a second
  23.   Serial1.println("Perseverance51");
  24.   digitalWriteFast(PC_2, !digitalReadFast(PC_2)) ;   // turn the LED off by making the voltage LOW
  25.   digitalWrite(led2, !digitalRead(led2)) ;
  26.   delay(1000);                       // wait for a second
  27.   Serial1.println("Arduino STM32G070RBT6");
  28. }
 楼主| 远芳侵古道 发表于 2023-11-29 15:35 | 显示全部楼层
除了上面定义方式外还有另一种指定串口的方法
  1. void setRx(uint32_t rx)
  2. void setTx(uint32_t tx)
  3. void setRx(PinName rx)
  4. void setTx(PinName tx)
 楼主| 远芳侵古道 发表于 2023-11-29 15:35 | 显示全部楼层
注意点:重载函数名相同,形参注意区分。
 楼主| 远芳侵古道 发表于 2023-11-29 15:35 | 显示全部楼层
variant_generic.h头文件声明了数字引脚
  1. /*----------------------------------------------------------------------------
  2. *        STM32 pins number
  3. *----------------------------------------------------------------------------*/
  4. #define PA0                     PIN_A0
  5. #define PA1                     PIN_A1
  6. #define PA2                     PIN_A2
  7. #define PA3                     PIN_A3
  8. #define PA4                     PIN_A4
  9. #define PA5                     PIN_A5
  10. #define PA6                     PIN_A6
  11. #define PA7                     PIN_A7
  12. #define PA8                     8
  13. #define PA9                     9
  14. #define PA10                    10
  15. #define PA11                    11
  16. #define PA12                    12
  17. #define PA13                    13
  18. #define PA14                    14
  19. #define PA15                    15
  20. #define PB0                     PIN_A8
  21. #define PB1                     PIN_A9
  22. #define PB2                     PIN_A10
  23. #define PB3                     19
  24. #define PB4                     20
  25. #define PB5                     21
  26. #define PB6                     22
  27. #define PB7                     23
  28. #define PB8                     24
  29. #define PB9                     25
  30. #define PB10                    PIN_A11
  31. #define PB11                    PIN_A12
  32. #define PB12                    PIN_A13
  33. #define PB13                    29
  34. #define PB14                    30
  35. #define PB15                    31
  36. #define PC0                     32
  37. #define PC1                     33
  38. #define PC2                     34
  39. #define PC3                     35
  40. #define PC4                     PIN_A14
  41. #define PC5                     PIN_A15
  42. #define PC6                     38
  43. #define PC7                     39
  44. #define PC8                     40
  45. #define PC9                     41
  46. #define PC10                    42
  47. #define PC11                    43
  48. #define PC12                    44
  49. #define PC13                    45
  50. #define PC14                    46
  51. #define PC15                    47
  52. #define PD0                     48
  53. #define PD1                     49
  54. #define PD2                     50
  55. #define PD3                     51
  56. #define PD4                     52
  57. #define PD5                     53
  58. #define PD6                     54
  59. #define PD8                     55
  60. #define PD9                     56
  61. #define PF0                     57
  62. #define PF1                     58
  63. #define PA9_R                   59
  64. #define PA10_R                  60

  65. // Alternate pins number
  66. #define PA6_ALT1                (PA6  | ALT1)
  67. #define PA7_ALT1                (PA7  | ALT1)
  68. #define PA7_ALT2                (PA7  | ALT2)
  69. #define PA7_ALT3                (PA7  | ALT3)
  70. #define PA15_ALT1               (PA15 | ALT1)
  71. #define PB0_ALT1                (PB0  | ALT1)
  72. #define PB1_ALT1                (PB1  | ALT1)
  73. #define PB1_ALT2                (PB1  | ALT2)
  74. #define PB6_ALT1                (PB6  | ALT1)
  75. #define PB13_ALT1               (PB13 | ALT1)
  76. #define PB14_ALT1               (PB14 | ALT1)
  77. #define PB15_ALT1               (PB15 | ALT1)
  78. #define PB15_ALT2               (PB15 | ALT2)
  79. #define PC4_ALT1                (PC4  | ALT1)
  80. #define PC5_ALT1                (PC5  | ALT1)
  81. #define PC8_ALT1                (PC8  | ALT1)
  82. #define PC9_ALT1                (PC9  | ALT1)
  83. #define PC10_ALT1               (PC10 | ALT1)
  84. #define PC11_ALT1               (PC11 | ALT1)

  85. #define NUM_DIGITAL_PINS        61
  86. #define NUM_REMAP_PINS          2
 楼主| 远芳侵古道 发表于 2023-11-29 15:37 | 显示全部楼层
PinNames.h头文件定义了形参PinName枚举类型

  1. typedef enum {
  2.   // Not connected
  3.   NC = 0xFFFFFFFF,

  4.   // Pin name definition
  5.   PA_0  = (PortA << 4) + 0x00,
  6.   PA_1  = (PortA << 4) + 0x01,
  7.   PA_2  = (PortA << 4) + 0x02,
  8.   PA_3  = (PortA << 4) + 0x03,
  9.   PA_4  = (PortA << 4) + 0x04,
  10.   PA_5  = (PortA << 4) + 0x05,
  11.   PA_6  = (PortA << 4) + 0x06,
  12.   PA_7  = (PortA << 4) + 0x07,
  13.   PA_8  = (PortA << 4) + 0x08,
  14.   PA_9  = (PortA << 4) + 0x09,
  15.   PA_10 = (PortA << 4) + 0x0A,
  16.   PA_11 = (PortA << 4) + 0x0B,
  17.   PA_12 = (PortA << 4) + 0x0C,
  18.   PA_13 = (PortA << 4) + 0x0D,
  19.   PA_14 = (PortA << 4) + 0x0E,
  20.   PA_15 = (PortA << 4) + 0x0F,

  21.   PB_0  = (PortB << 4) + 0x00,
  22.   PB_1  = (PortB << 4) + 0x01,
  23.   PB_2  = (PortB << 4) + 0x02,
  24.   PB_3  = (PortB << 4) + 0x03,
  25.   PB_4  = (PortB << 4) + 0x04,
  26.   PB_5  = (PortB << 4) + 0x05,
  27.   PB_6  = (PortB << 4) + 0x06,
  28.   PB_7  = (PortB << 4) + 0x07,
  29.   PB_8  = (PortB << 4) + 0x08,
  30.   PB_9  = (PortB << 4) + 0x09,
  31.   PB_10 = (PortB << 4) + 0x0A,
  32.   PB_11 = (PortB << 4) + 0x0B,
  33.   PB_12 = (PortB << 4) + 0x0C,
  34.   PB_13 = (PortB << 4) + 0x0D,
  35.   PB_14 = (PortB << 4) + 0x0E,
  36.   PB_15 = (PortB << 4) + 0x0F,
  37. #if defined GPIOC_BASE
  38.   PC_0  = (PortC << 4) + 0x00,
  39.   PC_1  = (PortC << 4) + 0x01,
  40.   PC_2  = (PortC << 4) + 0x02,
  41.   PC_3  = (PortC << 4) + 0x03,
  42.   PC_4  = (PortC << 4) + 0x04,
  43.   PC_5  = (PortC << 4) + 0x05,
  44.   PC_6  = (PortC << 4) + 0x06,
  45.   PC_7  = (PortC << 4) + 0x07,
  46.   PC_8  = (PortC << 4) + 0x08,
  47.   PC_9  = (PortC << 4) + 0x09,
  48.   PC_10 = (PortC << 4) + 0x0A,
  49.   PC_11 = (PortC << 4) + 0x0B,
  50.   PC_12 = (PortC << 4) + 0x0C,
  51.   PC_13 = (PortC << 4) + 0x0D,
  52.   PC_14 = (PortC << 4) + 0x0E,
  53.   PC_15 = (PortC << 4) + 0x0F,
  54. #endif
  55. #if defined GPIOD_BASE
  56.   PD_0  = (PortD << 4) + 0x00,
  57.   PD_1  = (PortD << 4) + 0x01,
  58.   PD_2  = (PortD << 4) + 0x02,
  59.   PD_3  = (PortD << 4) + 0x03,
  60.   PD_4  = (PortD << 4) + 0x04,
  61.   PD_5  = (PortD << 4) + 0x05,
  62.   PD_6  = (PortD << 4) + 0x06,
  63.   PD_7  = (PortD << 4) + 0x07,
  64.   PD_8  = (PortD << 4) + 0x08,
  65.   PD_9  = (PortD << 4) + 0x09,
  66.   PD_10 = (PortD << 4) + 0x0A,
  67.   PD_11 = (PortD << 4) + 0x0B,
  68.   PD_12 = (PortD << 4) + 0x0C,
  69.   PD_13 = (PortD << 4) + 0x0D,
  70.   PD_14 = (PortD << 4) + 0x0E,
  71.   PD_15 = (PortD << 4) + 0x0F,
  72. #endif
  73. #if defined GPIOE_BASE
  74.   PE_0  = (PortE << 4) + 0x00,
  75.   PE_1  = (PortE << 4) + 0x01,
  76.   PE_2  = (PortE << 4) + 0x02,
  77.   PE_3  = (PortE << 4) + 0x03,
  78.   PE_4  = (PortE << 4) + 0x04,
  79.   PE_5  = (PortE << 4) + 0x05,
  80.   PE_6  = (PortE << 4) + 0x06,
  81.   PE_7  = (PortE << 4) + 0x07,
  82.   PE_8  = (PortE << 4) + 0x08,
  83.   PE_9  = (PortE << 4) + 0x09,
  84.   PE_10 = (PortE << 4) + 0x0A,
  85.   PE_11 = (PortE << 4) + 0x0B,
  86.   PE_12 = (PortE << 4) + 0x0C,
  87.   PE_13 = (PortE << 4) + 0x0D,
  88.   PE_14 = (PortE << 4) + 0x0E,
  89.   PE_15 = (PortE << 4) + 0x0F,
  90. #endif
  91. #if defined GPIOF_BASE
  92.   PF_0  = (PortF << 4) + 0x00,
  93.   PF_1  = (PortF << 4) + 0x01,
  94.   PF_2  = (PortF << 4) + 0x02,
  95.   PF_3  = (PortF << 4) + 0x03,
  96.   PF_4  = (PortF << 4) + 0x04,
  97.   PF_5  = (PortF << 4) + 0x05,
  98.   PF_6  = (PortF << 4) + 0x06,
  99.   PF_7  = (PortF << 4) + 0x07,
  100.   PF_8  = (PortF << 4) + 0x08,
  101.   PF_9  = (PortF << 4) + 0x09,
  102.   PF_10 = (PortF << 4) + 0x0A,
  103.   PF_11 = (PortF << 4) + 0x0B,
  104.   PF_12 = (PortF << 4) + 0x0C,
  105.   PF_13 = (PortF << 4) + 0x0D,
  106.   PF_14 = (PortF << 4) + 0x0E,
  107.   PF_15 = (PortF << 4) + 0x0F,
  108. #endif
  109. #if defined GPIOG_BASE
  110.   PG_0  = (PortG << 4) + 0x00,
  111.   PG_1  = (PortG << 4) + 0x01,
  112.   PG_2  = (PortG << 4) + 0x02,
  113.   PG_3  = (PortG << 4) + 0x03,
  114.   PG_4  = (PortG << 4) + 0x04,
  115.   PG_5  = (PortG << 4) + 0x05,
  116.   PG_6  = (PortG << 4) + 0x06,
  117.   PG_7  = (PortG << 4) + 0x07,
  118.   PG_8  = (PortG << 4) + 0x08,
  119.   PG_9  = (PortG << 4) + 0x09,
  120.   PG_10 = (PortG << 4) + 0x0A,
  121.   PG_11 = (PortG << 4) + 0x0B,
  122.   PG_12 = (PortG << 4) + 0x0C,
  123.   PG_13 = (PortG << 4) + 0x0D,
  124.   PG_14 = (PortG << 4) + 0x0E,
  125.   PG_15 = (PortG << 4) + 0x0F,
  126. #endif
  127. #if defined GPIOH_BASE
  128.   PH_0  = (PortH << 4) + 0x00,
  129.   PH_1  = (PortH << 4) + 0x01,
  130.   PH_2  = (PortH << 4) + 0x02,
  131.   PH_3  = (PortH << 4) + 0x03,
  132.   PH_4  = (PortH << 4) + 0x04,
  133.   PH_5  = (PortH << 4) + 0x05,
  134.   PH_6  = (PortH << 4) + 0x06,
  135.   PH_7  = (PortH << 4) + 0x07,
  136.   PH_8  = (PortH << 4) + 0x08,
  137.   PH_9  = (PortH << 4) + 0x09,
  138.   PH_10 = (PortH << 4) + 0x0A,
  139.   PH_11 = (PortH << 4) + 0x0B,
  140.   PH_12 = (PortH << 4) + 0x0C,
  141.   PH_13 = (PortH << 4) + 0x0D,
  142.   PH_14 = (PortH << 4) + 0x0E,
  143.   PH_15 = (PortH << 4) + 0x0F,
  144. #endif
  145. #if defined GPIOI_BASE
  146.   PI_0  = (PortI << 4) + 0x00,
  147.   PI_1  = (PortI << 4) + 0x01,
  148.   PI_2  = (PortI << 4) + 0x02,
  149.   PI_3  = (PortI << 4) + 0x03,
  150.   PI_4  = (PortI << 4) + 0x04,
  151.   PI_5  = (PortI << 4) + 0x05,
  152.   PI_6  = (PortI << 4) + 0x06,
  153.   PI_7  = (PortI << 4) + 0x07,
  154.   PI_8  = (PortI << 4) + 0x08,
  155.   PI_9  = (PortI << 4) + 0x09,
  156.   PI_10 = (PortI << 4) + 0x0A,
  157.   PI_11 = (PortI << 4) + 0x0B,
  158.   PI_12 = (PortI << 4) + 0x0C,
  159.   PI_13 = (PortI << 4) + 0x0D,
  160.   PI_14 = (PortI << 4) + 0x0E,
  161.   PI_15 = (PortI << 4) + 0x0F,
  162. #endif
  163. #if defined GPIOJ_BASE
  164.   PJ_0  = (PortJ << 4) + 0x00,
  165.   PJ_1  = (PortJ << 4) + 0x01,
  166.   PJ_2  = (PortJ << 4) + 0x02,
  167.   PJ_3  = (PortJ << 4) + 0x03,
  168.   PJ_4  = (PortJ << 4) + 0x04,
  169.   PJ_5  = (PortJ << 4) + 0x05,
  170.   PJ_6  = (PortJ << 4) + 0x06,
  171.   PJ_7  = (PortJ << 4) + 0x07,
  172.   PJ_8  = (PortJ << 4) + 0x08,
  173.   PJ_9  = (PortJ << 4) + 0x09,
  174.   PJ_10 = (PortJ << 4) + 0x0A,
  175.   PJ_11 = (PortJ << 4) + 0x0B,
  176.   PJ_12 = (PortJ << 4) + 0x0C,
  177.   PJ_13 = (PortJ << 4) + 0x0D,
  178.   PJ_14 = (PortJ << 4) + 0x0E,
  179.   PJ_15 = (PortJ << 4) + 0x0F,
  180. #endif
  181. #if defined GPIOK_BASE
  182.   PK_0  = (PortK << 4) + 0x00,
  183.   PK_1  = (PortK << 4) + 0x01,
  184.   PK_2  = (PortK << 4) + 0x02,
  185.   PK_3  = (PortK << 4) + 0x03,
  186.   PK_4  = (PortK << 4) + 0x04,
  187.   PK_5  = (PortK << 4) + 0x05,
  188.   PK_6  = (PortK << 4) + 0x06,
  189.   PK_7  = (PortK << 4) + 0x07,
  190.   PK_8  = (PortK << 4) + 0x08,
  191.   PK_9  = (PortK << 4) + 0x09,
  192.   PK_10 = (PortK << 4) + 0x0A,
  193.   PK_11 = (PortK << 4) + 0x0B,
  194.   PK_12 = (PortK << 4) + 0x0C,
  195.   PK_13 = (PortK << 4) + 0x0D,
  196.   PK_14 = (PortK << 4) + 0x0E,
  197.   PK_15 = (PortK << 4) + 0x0F,
  198. #endif
  199. #if defined GPIOZ_BASE
  200.   PZ_0  = (PortZ << 4) + 0x00,
  201.   PZ_1  = (PortZ << 4) + 0x01,
  202.   PZ_2  = (PortZ << 4) + 0x02,
  203.   PZ_3  = (PortZ << 4) + 0x03,
  204.   PZ_4  = (PortZ << 4) + 0x04,
  205.   PZ_5  = (PortZ << 4) + 0x05,
  206.   PZ_6  = (PortZ << 4) + 0x06,
  207.   PZ_7  = (PortZ << 4) + 0x07,
  208.   PZ_8  = (PortZ << 4) + 0x08,
  209.   PZ_9  = (PortZ << 4) + 0x09,
  210.   PZ_10 = (PortZ << 4) + 0x0A,
  211.   PZ_11 = (PortZ << 4) + 0x0B,
  212.   PZ_12 = (PortZ << 4) + 0x0C,
  213.   PZ_13 = (PortZ << 4) + 0x0D,
  214.   PZ_14 = (PortZ << 4) + 0x0E,
  215.   PZ_15 = (PortZ << 4) + 0x0F,
  216. #endif

 楼主| 远芳侵古道 发表于 2023-11-29 15:38 | 显示全部楼层
示例6
  1. #define led1  PC2
  2. #define led2  PC3

  3. #define button1  PC0
  4. #define button2  PC1



  5. // the setup function runs once when you press reset or power the board
  6. void setup() {
  7.     Serial.setRx(PA10); // using pin name PY_n
  8.     Serial.setTx(PA9); // using pin number PYn
  9.   Serial.begin(115200);
  10.   // initialize digital pin LED_BUILTIN as an output.
  11.   pinMode(led1, OUTPUT);
  12.    pinMode(led2, OUTPUT);
  13.    digitalWrite(led1, LOW);
  14.    digitalWrite(led2, HIGH);
  15.      pinMode(button1, INPUT_PULLUP);
  16.    pinMode(button2, INPUT_PULLUP);

  17. }

  18. // the loop function runs over and over again forever
  19. void loop() {
  20. digitalToggleFast(PC_2);   // turn the LED on (HIGH is the voltage level)
  21.   digitalToggle(led2);
  22.   delay(1000);                       // wait for a second
  23.   Serial.println("Perseverance51");
  24.   digitalWriteFast(PC_2, !digitalReadFast(PC_2)) ;   // turn the LED off by making the voltage LOW
  25.   digitalWrite(led2, !digitalRead(led2)) ;
  26.   delay(1000);                       // wait for a second
  27.   Serial.println("Arduino STM32G070RBT6");
  28. }
 楼主| 远芳侵古道 发表于 2023-11-29 15:41 | 显示全部楼层
半双工模式
HardwareSerial(uint32_t _rxtx):U(S)ART用于半双工的Tx引脚编号(PYn)
HardwareSerial(PinName _rxtx):U(S)ART用于半双工的Tx引脚编号(PYn)
如果Rx == Tx则采用半双工模式::
HardwareSerial(uint32_t _rx, uint32_t _tx): U(S)ART用于半双工的Tx引脚编号(PYn)
HardwareSerial(PinName _rx, PinName tx): U(S)ART用于半双工的tx引脚名称(PY_n)
1
2
HardwareSerial(void *peripheral, HalfDuplexMode_t halfDuplex = HALF_DUPLEX_DISABLED):如果HALF_DUPLEX_ENABLED,在用于半双工的PeripheralPins.c中获取所请求外设的第一个Tx引脚.

添加enableHalfDuplexRx()使能Rx模式下的Serial。可以使用read()操作,但将避免执行读操作。在使用available()之前使用.
void setHalfDuplex():当实例未以半双工模式实例化时,启用实例的半双工模式。在这种情况下,必须在begin()之前调用。
 楼主| 远芳侵古道 发表于 2023-11-29 15:41 | 显示全部楼层
示例7
Serial4发送字节给Serial3,比较值,然后Serial3重新发送给Serial4并比较。需要连接PA0和PB10。
  1. HardwareSerial Serial3(PA0);
  2. HardwareSerial Serial4(PB10);

  3. //HardwareSerial Serial3(PA_0);
  4. //HardwareSerial Serial4(PB_10);

  5. //HardwareSerial Serial3(UART4, HALF_DUPLEX_ENABLED);
  6. //HardwareSerial Serial4(USART3, HALF_DUPLEX_ENABLED);

  7. //HardwareSerial Serial3(PA0, PA0);
  8. //HardwareSerial Serial4(PB10, PB10);

  9. //HardwareSerial Serial3(PA_0, PA_0);
  10. //HardwareSerial Serial4(PB_10, PB_10);

  11. //HardwareSerial Serial3(NC, PA_0);
  12. //HardwareSerial Serial4(NC, PB_10);

  13. //HardwareSerial Serial3(NUM_DIGITAL_PINS, PA0);
  14. //HardwareSerial Serial4(NUM_DIGITAL_PINS, PB10);

  15. static uint32_t nbTestOK = 0;
  16. static uint32_t nbTestKO = 0;
  17. void test_uart(int val)
  18. {
  19.   int recval = -1;
  20.   uint32_t error = 0;

  21.   Serial4.write(val);
  22.   delay(10);
  23.   while (Serial3.available()) {
  24.     recval = Serial3.read();
  25.   }
  26.   /* Enable Serial4 to RX*/
  27.   Serial4.enableHalfDuplexRx();
  28.   if (val == recval) {
  29.     Serial3.write(val);
  30.     delay(10);

  31.     while (Serial4.available()) {
  32.       recval = Serial4.read();
  33.     }
  34.     /* Enable Serial3 to RX*/
  35.     Serial3.enableHalfDuplexRx();
  36.     if (val == recval) {
  37.       nbTestOK++;
  38.       Serial.print("Exchange: 0x");
  39.       Serial.println(recval, HEX);
  40.     } else {
  41.       error = 2;
  42.     }
  43.   }
  44.   else {
  45.     error = 1;
  46.   }
  47.   if (error) {
  48.     Serial.print("Send: 0x");
  49.     Serial.print(val, HEX);
  50.     Serial.print("\tReceived: 0x");
  51.     Serial.print(recval, HEX);
  52.     Serial.print(" --> KO <--");
  53.     Serial.println(error);
  54.     nbTestKO++;
  55.   }
  56. }

  57. void setup() {
  58.   Serial.begin(115200);
  59.   Serial4.begin(9600);
  60.   Serial3.begin(9600);
  61. }

  62. void loop() {

  63.   for (uint32_t i = 0; i <= (0xFF); i++) {
  64.     test_uart(i);
  65.   }

  66.   Serial.println("Serial Half-Duplex test done.\nResults:");
  67.   Serial.print("OK: ");
  68.   Serial.println(nbTestOK);
  69.   Serial.print("KO: ");
  70.   Serial.println(nbTestKO);
  71.   while (1);
  72. }
Stahan 发表于 2023-11-29 15:52 | 显示全部楼层
arduino固件去哪里可以找到啊
单片小菜 发表于 2023-11-29 15:53 | 显示全部楼层
固件在官网上可以下载吗?
童雨竹 发表于 2024-7-11 07:18 | 显示全部楼层

使用的开关管数量多,且要求参数一致性好,驱动电路复杂,实现同步比较困难。这种电路结构通常使用在1KW以上超大功率开关电源电路中。
Wordsworth 发表于 2024-7-11 08:21 | 显示全部楼层

需要让电源热稳定,在稳定后再进行测试
Clyde011 发表于 2024-7-11 09:24 | 显示全部楼层

确保在开关管导通,
公羊子丹 发表于 2024-7-11 10:17 | 显示全部楼层

反激式电路与正激式电路相反,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

886

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部

85

主题

886

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部