메인1개 + 쓰레드 2개까지 돌릴 수 있음
UART통신의 경우, 메인에서 uart 3개 통신 가능
but 쓰레드 안에서 uart사용시, 쓰레드에서 1개 통신만 가능( ex) 메인에서 2개, 쓰레드에서 1개 가능)
이 이상 연결시 ERROR뜸;;
<HOW TO>
#include <BufferedSerial.h>
BufferedSerial My_port(PA_9, PA_10, 9600); //tx, rx, baudrate
//기본 외 UART선언시, 빨간 보드 사용(RX, TX 교차)해서 PC와 연결해주기!
char cnt[] ="1234\n";
My_port.write(cnt,5); //배열이름, 배열크기
---------------------------------------------------------------------------------------------------------------------
#include <mbed.h>
#include <BufferedSerial.h>
#define BLINKING_RATE 500ms
uint16_t t_loop1 = 0;
uint16_t t_loop2 = 0;
uint16_t t_loop3 = 0;
uint16_t t_loop4 = 0;
//I/O 멀티펑션보드 사용
DigitalOut led1(PB_0, 1);
DigitalOut led2(PB_1, 1);
DigitalOut led3(PB_2, 1);
DigitalOut led4(PB_3, 1);
DigitalOut led5(PB_4, 1);
DigitalOut led6(PB_5, 1);
DigitalOut led7(PB_6, 1);
DigitalOut led8(PB_7, 1);
//쓰레드 객체 선언
Thread run_1;
Thread run_2;
Thread run_3;
Thread run_4;
BufferedSerial pc(USBTX, USBRX,115200); //기본 9600bps == Mbed 6.0
BufferedSerial My_port(PA_9, PA_10, 9600); //tx, rx, baudrate
BufferedSerial My_port2(PC_10, PC_11, 57600);
char cnt[] ="1234\n";
char cnt2[] ="abcde\n";
void run_1_func()
{
while(1)
{
led1 = !led1;
My_port.write(cnt,5);
//puts("OK1");
//putchar('k');
//HAL_Delay(200); //thread 걸리는 시간 interval 아님 led켜져있는 시간 조절
}
}
void run_2_func()
{
while(1)
{
led3 = !led3;
My_port2.write(cnt2,6);
}
}
void run_3_func()
{
while(1)
{
HAL_Delay(1);
t_loop3++;
if(t_loop3 > 300){
led5 = !led5;
printf("OK3\n");
t_loop3=0;
}
}
}
int main(){
run_1.start(run_1_func);
//run_2.start(run_2_func);
//run_3.start(run_3_func);
while(1){
led8 = !led8;
// led1 = !led1;
// led2 = !led2;
// led3 = !led3;
// led4 = !led4;
printf("OK\n");
//My_port.write(cnt,5);
My_port2.write(cnt2,6);
ThisThread::sleep_for(BLINKING_RATE);
}
}
첫댓글 감사드립니다.