글쓰기
로그인
회원가입
##stm32
뎁스_3233
· 1년전
질문
아두이노에서 미세먼지 값을 stm32f10x로 받을 수 있는방법이 있나요...?
밑에는 STM32코드입니다! IAR Embedded Workbench IDE 프로그램 사용합니다 getch함수로 받을수 있다는데 어떻게 해야할지 모르겠습니다... #include "stm32f10x_lib.h" #include "System_func.h" #include"lib_sensor.h" #include"lcd.h" #include"user_delay.h" u8 a=0; void print_data(char* str, u16 data); void putch(unsigned char c){ USART_SendData(USART1, c); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } void puts(u8 *s){ while (*s != '\0'){ putch(*s); s ++; } } unsigned char getch(){ unsigned char key = 0; while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); key = USART_ReceiveData(USART1); return key; } int main(void){ Init_STM32F103(); EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; u16 tempC,tempF; Timer_Delay_init(); lcdInit(); custom(); initialize_sht11_hanback(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_USART1| RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; GPIO_Init(GPIOB, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_InitStructure.USART_Clock = USART_Clock_Disable; USART_InitStructure.USART_CPOL = USART_CPOL_Low; USART_InitStructure.USART_CPHA = USART_CPHA_2Edge; USART_InitStructure.USART_LastBit = USART_LastBit_Disable; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); GPIO_InitStructure.GPIO_Pin = 0xFF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1); EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); EXTI_InitStructure.EXTI_Line = EXTI_Line1; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); while (1){ if(a==0){ lcdGotoXY(1,0); lcdPrint("PRESS 1 BUTTON!"); lcdDataWrite(0x00); lcdGotoXY(1,1); lcdPrint("PRESS 2 BUTTON!"); lcdDataWrite(0x01); } else if(a==1){ tempC = get_sht11_hanback_data(TEMP); tempF = tempC*5/9+320; delay_ms(100); lcdGotoXY(1,0); print_data("TempC : ",tempC); lcdDataWrite(0x00); lcdGotoXY(1,1); print_data("TempF : ",tempF); lcdDataWrite(0x01); } else if(a==2){ lcdClear(); } else; } } void print_data(char* str, u16 data){ lcdPrint(str); lcdDataWrite(data/100 + '0'); lcdDataWrite((data/10)%10 + '0'); lcdDataWrite('.'); lcdDataWrite((data)%10 + '0'); } 사진에 보이시는 것 처럼 stm32에 ugm3를 아두이노에서 보낸 미세먼지 값입니다ㅠㅠ 어떻게 이 ugm3값을 받을 수 있을까요...
##아두이노
##stm32
310
3
0
윈비
·
2024-12-10
데이터가 문자열 형태로 전송되므로, STM32에서 문자열 처리를 추가해야 합니다. char buffer[16]; // 데이터를 저장할 버퍼 int index = 0; void USART_Receive_String() { while (1) { unsigned char received = getch(); // 1바이트 수신 ...
더 보기