리눅스에서 표준출력 바꾸는 방법 있음
printf > 파일에 기록되게 할 수 있다.
UART : 장치 관리자 > 포트 > usb serial port(com3)
3.3v 로 스위치 바꾸어 줘야함
모듈 보드
DTR
RX (수신부) - 보드에서는 TX (PA9), 60번
TX(송신부) - 보드에서는 RX (PA10) ,55번
VCC
CTS
GND //신호의 기준선
XShell5
세션만들기 > 프로토콜 :serial > serial 설정 : com3
STM32
char senddata[20]= "hello world\r\n"; // 엔터 하려면 \r\n
FTDI 모듈 > 컴퓨터 (드라이버) >Port3 > xshell > hello world
오실로스코프
start 1 data 8 (패리티비트) stop 1
0 1
// 리틀 엔디안 방식 : 우 > 좌
//ex) " he " : 1101000 1100101
: 0 00010110 1 0 10100110 1
리틀엔디안!
: 전송순서는 안바뀜, 각각의 data 저장 순서가 바뀜
(전송순서) h -> e
(저장순서) 0 0001011 1 0 1010011 1
>> 비동기 방식이라 clock 이 없어서
data 길이로만 판단해야하는데 구분이 쉽지않음
동기 방식 (클럭) : SPI , USART
비동기 방식 (클럭x) : UART
동기: 클럭만을 따름 > 클럭마다 시간이 다르더라도
비동기: 시간만을 따름 ex) 115200 bit/s // 1초를 115200으로 나눔
printf 하는법
int _write(int file,char *p, int len){
HAL_UART_Transmit(&huart1, (uint8_t *)p,len,10);
return len;
}
_write 함수 , 반환 >문자열길이 (printf와 동일)
디버깅 >
expressions : break point 걸면 실행마다 값 보임
live expressions : 실시간으로 보임 // 전역으로 선언 해야 보임
> main 에 넣으면 스택으로 들어가기 때문에 실시간으로 보는데 문제있음
>>전역에 함으로서 컴파일 단계에서 메모리를 따로 빼서 볼 수 있음
// __attribute__((weak)) int _write(int file, char *ptr, int len)
weak : 약한정의
> 함수의 기본 구현을 제공 + 필요에 따라 해당 함수를 덮어쓸 수 있는 유연성을 확보.
실수까지 하려면
속성 > c 빌드 > 셋팅 > mcu gcc linker > miscellaneous > 플래그 설정 > -u _printf_float //링커 옵션
__attribute__((__format__(__printf__, 1, 2)))
: 형식 지정자와 인수들이 올바르게 일치하는지 컴파일러가 확인하도록함.