//智能车上位机数据上传函数 void Report_imu( unsigned short int roll, unsigned short int pitch, unsigned short int yaw) { int i, j; static unsigned short int send_data[3][8] = { { 0 }, { 0 }, { 0 } }; send_data[0][0] = ( unsigned short int)(roll); send_data[0][1] = ( unsigned short int)(pitch); send_data[0][2] = ( unsigned short int)(yaw); send_data[0][3] = (unsigned short int)(0); send_data[0][4] = (unsigned short int)(0); send_data[0][5] = (unsigned short int)(0); send_data[0][6] = (unsigned short int)(0); send_data[0][7] = (unsigned short int)(0); send_data[1][0] = (unsigned short int)(0); send_data[1][1] = (unsigned short int)(0); send_data[1][2] = (unsigned short int)(0); send_data[1][3] = (unsigned short int)(0); send_data[1][4] = (unsigned short int)(0); send_data[1][5] = (unsigned short int)(0); send_data[1][6] = (unsigned short int)(0); send_data[1][7] = (unsigned short int)(0); send_data[2][0] = (unsigned short int)(0); send_data[2][1] = (unsigned short int)(0); send_data[2][2] = (unsigned short int)(0); send_data[2][3] = (unsigned short int)(0); send_data[2][4] = (unsigned short int)(0); send_data[2][5] = (unsigned short int)(0); send_data[2][6] = (unsigned short int)(0); send_data[2][7] = (unsigned short int)(0); printf('S'); printf('T'); for ( i = 0; i < 3; i++) for ( j = 0; j < 8; j++) { usart1_send_char((unsigned char)(send_data[i][j] & 0x00ff)); usart1_send_char((unsigned char)(send_data[i][j] >> 8u)); } }
int __io_putchar(char ch) { usart1_send_char(ch); return 0; }
/** * @brief Main program. * @param None * @retval None */ int main(void) { int i; char ch = 'a'; int leftright, forwardbackward, throttle, trim; char buffer[100]; int matches; /* GPIOC Periph clock enable */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); /* Configure PC10 in output pushpull mode */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOC, &GPIO_InitStructure); /* Configure PA15 in input mode, no pullup/down */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); usart1_init(); // USART_IT_RXNE: Receive Data register not empty interrupt. //USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //NVIC_Config(); // disable error interrupts from USART1 (EIE=0) //USART1->CR3 &= ~(1 << 0); leftright = 126; forwardbackward = 126; throttle = 0; trim = 148; if (!writebuffer) { writebuffer = buffer1; readbuffer = buffer2; } { /* uint32_t dest[10]; */ /* uint32_t src[10] = {0,1,2,3,4,5,6,7,8,9}; */ /* __aeabi_memcpy(dest, src, 10); */ /* memcpy(dest, src, 10); */ } printf("Starting...\r\n"); i = 20; while (1) { //send_command(132, 126, 24, 150); //send_command(leftright, forwardbackward, throttle, trim); // Channel command intervals: // A: 120 ms // B: 180 ms // But it seems that the heli doesn't care, so we can have longer intervals //delay_ms(180); if (usart1_receive_char(&ch)) { usart1_send_char(ch); } //delay_ms(1000); // USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); // if (new_message) { // strcpy(buffer, readbuffer); // new_message = 0; // USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // printf("new message: \"%s\"\r\n", buffer); // matches = sscanf((const char *)buffer, "%d %d %d", &leftright, &forwardbackward, &throttle); // if (matches == 3) { // printf("new controls: %d %d %d\r\n", leftright, forwardbackward, throttle); // } // } else { // USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // } //detect_and_print_pulses(); //delay_ms(500); // GPIOC->BSRR = BSRR_VAL; // delay_us(600); // GPIOC->BRR = BSRR_VAL; // delay_us(10); } }
void usart1_send_str(char *str) { while (*str != '\0') { usart1_send_char(*(str++)); } }