/* * Ein einzelnes Zeichen senden */ void Xbee::PutChar(uint16_t char2send) { while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); USART_SendData(USART2, char2send); }
int main(void) { u8 t; u8 len; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 delay_init(168); //延时初始化 uart_init(115200); //串口初始化波特率为115200 LED_Init(); //初始化与LED连接的硬件接口 // USART2_ConfigBaud(9600); // 串口初始化,波特率为9600 // KEY_Init(); // LED_Init(); /* HSE 为8M, SYSCLK = 8/25*336 TIM3 时钟(APB2) = SYSCLK/4*2 约为 27M */ /* 27M 分频系数位27, 计数的频率为1M,重装载值为200,PWM的频率为1M/200 = 5KHz*/ //TIM4_PWM_Init(200-1,84-1); //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 /* HSE 为8MLL_M为25时 SYSCLK = 8/25*336 TIM3 时钟 = SYSCLK/4*2 约为 27M */ /* HSE 为8MLL_M为8时 SYSCLK = 8/8*336 TIM3 时钟 = SYSCLK/4*2 约为 84M */ //TIM3_Int_Init(5000-1,8400-1); //定时器时钟84M(168/4*2),分频系数8400,所以84M/8400=10Khz 的计数频率,计数5000需要500ms while(1) { /* delay_ms(10); if(dir)led0pwmval++; else led0pwmval--; if(led0pwmval>190)dir=0; if(led0pwmval==0)dir=1; */ // TIM_SetCompare1(TIM4,led0pwmval); //修改比较值,修改占空比 if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度 for(t=0;t<len;t++) { USART_SendData(USART2, USART_RX_BUF[t]); //向串口2发送数据 while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束 } // USART_SendData(USART2, SPA_NUM+48); //向串口2发送数据,数据的条数 // while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束 string_to_value(); // LED14_FLAG = FACTOR[0]; // send_str("\nLED14: "); // USART_SendData(USART2, LED14_FLAG); //向串口2发送数据 // while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束 if(FACTOR[1] - 2700 == 0) { turn_on_led5(); } else { turn_off_led5(); } SPA_NUM = 0; USART_RX_STA=0; } }; }
void Serial1::transmit(char value){ while(USART_GetFlagStatus(SERIAL1CH, USART_FLAG_TXE) == RESET); USART_SendData(SERIAL1CH, value); }
/** * @brief Main program * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file */ /* System Clocks Configuration */ RCC_Configuration(); /* Configure the GPIO ports */ GPIO_Configuration(); /* USARTy and USARTz configuration ------------------------------------------------------*/ /* USARTy and USARTz configured as follow: - BaudRate = 230400 baud - Word Length = 8 Bits - One Stop Bit - Even parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ USART_InitStructure.USART_BaudRate = 230400; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_Even; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /* Configure USARTy */ USART_Init(USARTy, &USART_InitStructure); /* Configure USARTz */ USART_Init(USARTz, &USART_InitStructure); /* Enable the USARTy */ USART_Cmd(USARTy, ENABLE); /* Enable the USARTz */ USART_Cmd(USARTz, ENABLE); while(TxCounter < TxBufferSize) { /* Send one byte from USARTy to USARTz */ USART_SendData(USARTy, TxBuffer[TxCounter++]); /* Loop until USARTy DR register is empty */ while(USART_GetFlagStatus(USARTy, USART_FLAG_TXE) == RESET) { } /* Loop until the USARTz Receive Data Register is not empty */ while(USART_GetFlagStatus(USARTz, USART_FLAG_RXNE) == RESET) { } /* Store the received byte in RxBuffer */ RxBuffer[RxCounter++] = (USART_ReceiveData(USARTz) & 0x7F); } /* Check the received data with the send ones */ TransferStatus = Buffercmp(TxBuffer, RxBuffer, TxBufferSize); /* TransferStatus = PASSED, if the data transmitted from USARTy and received by USARTz are the same */ /* TransferStatus = FAILED, if the data transmitted from USARTy and received by USARTz are different */ while (1) { } }
int main(void) { float period = 0.0; float lasttime = 0.0; setup(); #include "comps/frt.comp" #include "comps/rt.comp" #include "comps/nrt.comp" #include "comps/pos_minus.comp" #include "comps/pwm2uvw.comp" #include "comps/pwmout.comp" #include "comps/pwm2uart.comp" #include "comps/enc.comp" #include "comps/res.comp" //#include "comps/pid.comp" #include "comps/term.comp" #include "comps/sim.comp" #include "comps/pderiv.comp" #include "comps/pderiv.comp" #include "comps/autophase.comp" #include "comps/vel_observer.comp" set_comp_type("net"); HAL_PIN(enable) = 0.0; HAL_PIN(cmd) = 0.0; HAL_PIN(fb) = 0.0; HAL_PIN(cmd_d) = 0.0; HAL_PIN(fb_d) = 0.0; HAL_PIN(u) = 0.0; HAL_PIN(v) = 0.0; HAL_PIN(w) = 0.0; for(int i = 0; i < hal.init_func_count; i++){ hal.init[i](); } TIM_Cmd(TIM2, ENABLE);//int TIM_Cmd(TIM4, ENABLE);//PWM TIM_Cmd(TIM5, ENABLE);//PID link_pid(); link_ac_sync_res(); set_hal_pin("ap0.start", 1.0); link_hal_pins("sim0.sin", "net0.cmd"); link_hal_pins("net0.cmd", "vel_ob0.pos_in"); link_hal_pins("net0.cmd", "term0.wave0"); link_hal_pins("net0.cmd_d", "term0.wave1"); link_hal_pins("vel_ob0.pos_out", "term0.wave2"); link_hal_pins("vel_ob0.vel_out", "term0.wave3"); link_hal_pins("vel_ob0.trg", "rt0.trg0"); set_hal_pin("term0.gain0", 10.0); set_hal_pin("term0.gain1", 10.0); set_hal_pin("term0.gain2", 10.0); set_hal_pin("term0.gain3", 10.0); set_hal_pin("sim0.amp", 1.0); set_hal_pin("sim0.freq", 0.5); set_hal_pin("vel_ob0.alpha", 1.0); set_hal_pin("vel_ob0.beta", 0.1); link_hal_pins("pwm2uart0.uout", "net0.u"); link_hal_pins("pwm2uart0.vout", "net0.v"); link_hal_pins("pwm2uart0.wout", "net0.w"); data_t data; while(1) // Do not exit { Wait(1); period = time/1000.0 + (1.0 - SysTick->VAL/RCC_Clocks.HCLK_Frequency)/1000.0 - lasttime; lasttime = time/1000.0 + (1.0 - SysTick->VAL/RCC_Clocks.HCLK_Frequency)/1000.0; for(int i = 0; i < hal.nrt_func_count; i++){ hal.nrt[i](period); } data.data[0] = (uint16_t)PIN(u); data.data[1] = (uint16_t)PIN(v); data.data[2] = (uint16_t)PIN(w); while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET); USART_SendData(USART3, 0x155); for(int i = 0; i < DATALENGTH * 2; i++){ while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET); USART_SendData(USART3, data.byte[i]); } } }
void sendByte(uint8_t x) { while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET); USART_SendData(USARTx, x); }
void DStepSerial0::write(char ch) { USART_SendData(uartType, (uint8_t) ch); while(USART_GetFlagStatus(UART5, USART_FLAG_TC) == RESET){} }
//-------------------------------------------------------------- // ein Byte per UART senden //-------------------------------------------------------------- void UB_Uart_SendByte(UART_NAME_t uart, uint16_t wert) { // warten bis altes Byte gesendet wurde while (USART_GetFlagStatus(UART[uart].UART, USART_FLAG_TXE) == RESET); USART_SendData(UART[uart].UART, wert); }
void serial_putc(serial_t *obj, int c) { USART_TypeDef *usart = (USART_TypeDef *)(obj->uart); while (!serial_writable(obj)); USART_SendData(usart, (uint16_t)c); }
/** * @brief Main program * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file */ /* System Clocks Configuration */ RCC_Configuration(); /* Configure the GPIO ports */ GPIO_Configuration(); /* Configure the SPI */ SPI_Configuration(); /* USARTy configuration ------------------------------------------------------*/ /* USARTy configured as follow: - BaudRate = 115200 baud - Word Length = 8 Bits - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled - USART Clock Enabled - USART CPOL: Clock is active High - USART CPHA: Data is captured on the second edge - USART LastBit: The clock pulse of the last data bit is output to the SCLK pin */ USART_ClockInitStructure.USART_Clock = USART_Clock_Enable; USART_ClockInitStructure.USART_CPOL = USART_CPOL_High; USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; USART_ClockInitStructure.USART_LastBit = USART_LastBit_Enable; USART_ClockInit(USARTy, &USART_ClockInitStructure); USART_InitStructure.USART_BaudRate = 115200; 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_Init(USARTy, &USART_InitStructure); /* Configure the USARTy */ USART_Init(USARTy, &USART_InitStructure); /* Enable the USARTy */ USART_Cmd(USARTy, ENABLE); while(NbrOfDataToRead2--) { /* Write one byte in the USARTy Transmit Data Register */ USART_SendData(USARTy, TxBuffer1[TxCounter1++]); /* Wait until end of transmit */ while(USART_GetFlagStatus(USARTy, USART_FLAG_TC) == RESET) { } /* Wait the byte is entirtly received by SPIy */ while(SPI_I2S_GetFlagStatus(SPIy, SPI_I2S_FLAG_RXNE) == RESET) { } /* Store the received byte in the RxBuffer2 */ RxBuffer2[RxCounter2++] = SPI_I2S_ReceiveData(SPIy); } /* Clear the USARTy Data Register */ USART_ReceiveData(USARTy); while(NbrOfDataToRead1--) { /* Wait until end of transmit */ while(SPI_I2S_GetFlagStatus(SPIy, SPI_I2S_FLAG_TXE)== RESET) { } /* Write one byte in the SPIy Transmit Data Register */ SPI_I2S_SendData(SPIy, TxBuffer2[TxCounter2++]); /* Send a Dummy byte to generate clock to slave */ USART_SendData(USARTy, DYMMY_BYTE); /* Wait until end of transmit */ while(USART_GetFlagStatus(USARTy, USART_FLAG_TC) == RESET) { } /* Wait the byte is entirtly received by USARTy */ while(USART_GetFlagStatus(USARTy, USART_FLAG_RXNE) == RESET) { } /* Store the received byte in the RxBuffer1 */ RxBuffer1[RxCounter1++] = USART_ReceiveData(USARTy); } /* Check the received data with the send ones */ TransferStatus1 = Buffercmp(TxBuffer1, RxBuffer2, TxBufferSize1); /* TransferStatus = PASSED, if the data transmitted from USARTy and received by SPIy are the same */ /* TransferStatus = FAILED, if the data transmitted from USARTy and received by SPIy are different */ TransferStatus2 = Buffercmp(TxBuffer2, RxBuffer1, TxBufferSize2); /* TransferStatus = PASSED, if the data transmitted from SPIy and received by USARTy are the same */ /* TransferStatus = FAILED, if the data transmitted from SPIy and received by USARTy are different */ while (1) { } }
void comm_put(unsigned char d) { while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET) { ; } USART_SendData(USARTx, (uint16_t)d); }
uint8_t U_USART1::print_c(uint8_t c) { USART_SendData(USART1, c); while (((USART1->ISR & USART_FLAG_TXE) == (uint16_t) RESET)) ; return 1; }
void usart_sendByte(USART_TypeDef *usart, u8 val) { USART_SendData(usart, val); while (USART_GetFlagStatus(usart, USART_FLAG_TC) == RESET); }
//重定向printf函数 int fputc(int ch, FILE *f) { USART_SendData(UART4, (uint8_t) ch); while (USART_GetFlagStatus(UART4, USART_FLAG_TC) == RESET); return ch; }
/******************************************************************************* * Function Name : SerialPutChar * Description : Print a character on the HyperTerminal * Input : - c: The character to be printed * Output : None * Return : None *******************************************************************************/ void SerialPutChar(char c) { USART_SendData(USART1, c); while ((USART1->SR & USART_SR_TXE ) != USART_SR_TXE ); }
int SendChar (int ch) { /* Write character to Serial Port */ USART_SendData(USART1, (unsigned char) ch); while (!(USART1->SR & USART_FLAG_TXE)); return (ch); }
/*====================================================================================================*/ void UART_SendByte( USART_TypeDef *USARTx, int8_t *SendData ) { USART_SendData(USARTx, *SendData); while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET); }
/** * @brief This function handles USRAT interrupt request. * @param None * @retval None */ void USARTx_IRQHandler(void) { /* USART in mode Tramitter -------------------------------------------------*/ if (USART_GetITStatus(USARTx, USART_IT_TXE) == SET) { /* When Joystick Pressed send the command then send the data */ if (UsartMode == USART_MODE_TRANSMITTER) { /* Send the command */ if (UsartTransactionType == USART_TRANSACTIONTYPE_CMD) { USART_SendData(USARTx, CmdBuffer[TxIndex++]); if (TxIndex == 0x02) { /* Disable the USARTx transmit data register empty interrupt */ USART_ITConfig(USARTx, USART_IT_TXE, DISABLE); } } /* Send the data */ else { USART_SendData(USARTx, TxBuffer[TxIndex++]); if (TxIndex == GetVar_NbrOfData()) { /* Disable the USARTx transmit data register empty interrupt */ USART_ITConfig(USARTx, USART_IT_TXE, DISABLE); } } } /*If Data Received send the ACK*/ else { USART_SendData(USARTx, AckBuffer[TxIndex++]); if (TxIndex == 0x02) { /* Disable the USARTx transmit data register empty interrupt */ USART_ITConfig(USARTx, USART_IT_TXE, DISABLE); } } } /* USART in mode Receiver --------------------------------------------------*/ if (USART_GetITStatus(USARTx, USART_IT_RXNE) == SET) { if (UsartMode == USART_MODE_TRANSMITTER) { AckBuffer[RxIndex++] = USART_ReceiveData(USARTx); } else { /* Receive the command */ if (UsartTransactionType == USART_TRANSACTIONTYPE_CMD) { CmdBuffer[RxIndex++] = USART_ReceiveData(USARTx); } /* Receive the USART data */ else { RxBuffer[RxIndex++] = USART_ReceiveData(USARTx); } } } }
void usart_transmit_byte( USART_TypeDef* port, u16 chr) { USART_SendData(port, chr); while (USART_GetFlagStatus(port, USART_FLAG_TXE) == RESET) ; }
bool Usart::write(uint8_t byte) { while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET) {} USART_SendData(USARTx,(uint8_t)byte); return true; }
/** * @brief Main program. * @param None * @retval None */ int main(void) { uint8_t *buffptr; /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f0xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f0xx.c file */ if (SysTick_Config(SystemCoreClock / 1000)) { /* error */ while (1); } /* Configure clock GPIO, USARTs */ RCC_Configuration(); /* Configure GPIO Pin Tx/Rx for Usart communication */ GPIO_Configuration(); /* Configure NVIC */ NVIC_Configuration(); /* 8xUSARTs configuration --------------------------------------------------*/ /* 8xUSARTs configured as follow: - BaudRate = 9600 baud - Word Length = 8 Bits - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ 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; /* Prepare all uart to receive a data packet */ for(UsartIndex = 0; UsartIndex < USART_MAX_INDEX; UsartIndex++) { USART_Init(UsartInstance[UsartIndex], &USART_InitStructure); /* Enable 8xUSARTs Receive interrupts */ USART_ITConfig(UsartInstance[UsartIndex], USART_IT_RXNE, ENABLE); /* Enable the 8xUSARTs */ USART_Cmd(UsartInstance[UsartIndex], ENABLE); } /* Infinite Loop */ while(1) { /* Set aRxBuffer to 0 */ memset(aRxBuffer, 0x0, BUFFER_SIZE * USART_MAX_INDEX); /* When data has been transferred start the next transfer */ for(UsartIndex = 0; UsartIndex < USART_MAX_INDEX; UsartIndex++) { /* Initialize the global variable to handle the data transfer */ TxCounter = 0; ReceiveState = 0; /* Delay to let time to see counter incrementation on the screen */ Delay(2000); /* Set the data buffptr to use for the transfer */ if (UsartIndex == 0) { buffptr = aTxBuffer; } else { buffptr = aRxBuffer[UsartIndex]; } while(TxCounter < BUFFER_SIZE) { /* Send one byte from USART1 to USARTx */ USART_SendData(UsartInstance[UsartIndex], buffptr[TxCounter++]); /* Loop until USART1 DR register is empty */ while(USART_GetFlagStatus(UsartInstance[UsartIndex], USART_FLAG_TXE) == RESET) {} } while(ReceiveState == 0); /* Compares two buffers */ if(UsartIndex == (USART_MAX_INDEX - 1)) { if( Buffercmp((uint8_t*) aRxBuffer[0], (uint8_t*) aTxBuffer, BUFFER_SIZE)) { /* Error */ while(1); } } else { if( Buffercmp((uint8_t*) aRxBuffer[UsartIndex+1], (uint8_t*) aTxBuffer, BUFFER_SIZE)) { /* Error */ while(1); } } ReceiveState = 0; } /* Insert delay */ Delay(2000); } }
/* * 函数名:USART1_printf * 描述 :格式化输出,类似于C库中的printf,但这里没有用到C库 * 输入 :-USARTx 串口通道,这里只用到了串口1,即USART1 * -Data 要发送到串口的内容的指针 * -... 其他参数 * 输出 :无 * 返回 :无 * 调用 :外部调用 * 典型应用USART1_printf( USART1, "\r\n this is a demo \r\n" ); * USART1_printf( USART1, "\r\n %d \r\n", i ); * USART1_printf( USART1, "\r\n %s \r\n", j ); */ void USART1_printf(USART_TypeDef* USARTx, uint8_t *Data,...) { const char *s; int d; char buf[16]; va_list ap; va_start(ap, Data); while ( *Data != 0) // 判断是否到达字符串结束符 { if ( *Data == 0x5c ) //'\' { switch ( *++Data ) { case 'r': //回车符 USART_SendData(USARTx, 0x0d); Data ++; break; case 'n': //换行符 USART_SendData(USARTx, 0x0a); Data ++; break; default: Data ++; break; } } else if ( *Data == '%') { // switch ( *++Data ) { case 's': //字符串 s = va_arg(ap, const char *); for ( ; *s; s++) { USART_SendData(USARTx,*s); while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET ); } Data++; break; case 'd': //十进制 d = va_arg(ap, int); itoa(d, buf, 10); for (s = buf; *s; s++) { USART_SendData(USARTx,*s); while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET ); } Data++; break; default: Data++; break; } } /* end of else if */ else USART_SendData(USARTx, *Data++); while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET ); }
void PutChar(u8 Data) { USART_SendData(USART1 , Data); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);//等待发送完毕 }
/** * @brief Main program * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file */ /* System Clocks Configuration */ RCC_Configuration(); /* Configure the GPIO ports */ GPIO_Configuration(); /* USARTy and USARTz configuration -------------------------------------------*/ /* USARTy and USARTz configured as follow: - BaudRate = 230400 baud - Word Length = 8 Bits - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ USART_InitStructure.USART_BaudRate = 230400; 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; /* Configure USARTy */ USART_Init(USARTy, &USART_InitStructure); /* Configure USARTz */ USART_Init(USARTz, &USART_InitStructure); /* Enable the USARTy */ USART_Cmd(USARTy, ENABLE); /* Enable the USARTz */ USART_Cmd(USARTz, ENABLE); /* Enable USARTy Half Duplex Mode*/ USART_HalfDuplexCmd(USARTy, ENABLE); /* Enable USARTz Half Duplex Mode*/ USART_HalfDuplexCmd(USARTz, ENABLE); while(NbrOfDataToRead2--) { /* Wait until end of transmit */ while(USART_GetFlagStatus(USARTy, USART_FLAG_TXE) == RESET) { } /* Write one byte in the USARTy Transmit Data Register */ USART_SendData(USARTy, TxBuffer1[TxCounter1++]); /* Wait the byte is entirtly received by USARTz */ while(USART_GetFlagStatus(USARTz, USART_FLAG_RXNE) == RESET) { } /* Store the received byte in the RxBuffer2 */ RxBuffer2[RxCounter2++] = USART_ReceiveData(USARTz); } /* Clear the USARTy Data Register */ USART_ReceiveData(USARTy); while(NbrOfDataToRead1--) { /* Wait until end of transmit */ while(USART_GetFlagStatus(USARTz, USART_FLAG_TXE)== RESET) { } /* Write one byte in the USARTz Transmit Data Register */ USART_SendData(USARTz, TxBuffer2[TxCounter2++]); /* Wait the byte is entirtly received by USARTy */ while(USART_GetFlagStatus(USARTy,USART_FLAG_RXNE) == RESET) { } /* Store the received byte in the RxBuffer1 */ RxBuffer1[RxCounter1++] = USART_ReceiveData(USARTy); } /* Check the received data with the send ones */ TransferStatus1 = Buffercmp(TxBuffer1, RxBuffer2, TxBufferSize1); /* TransferStatus = PASSED, if the data transmitted from USARTy and received by USARTz are the same */ /* TransferStatus = FAILED, if the data transmitted from USARTy and received by USARTz are different */ TransferStatus2 = Buffercmp(TxBuffer2, RxBuffer1, TxBufferSize2); /* TransferStatus = PASSED, if the data transmitted from USARTz and received by USARTy are the same */ /* TransferStatus = FAILED, if the data transmitted from USARTz and received by USARTy are different */ while (1) { } }
/** * Base function to send only one byte * */ static inline void send_char(unsigned char c) { USART_SendData(USARTx, c); while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET) { } }
void USART_TransmitOne(unsigned char data){ USART_ClearFlag(USART1, USART_FLAG_TC); USART_SendData(USART1, data); while(RESET == USART_GetFlagStatus(USART1, USART_FLAG_TC)) ; }
/*#####################################################*/ void _UARTCharPut(unsigned int BaseAddr, unsigned char byteTx) { USART_SendData((USART_TypeDef*)BaseAddr, byteTx); }
void usart2_putchar(unsigned char ch) { USART2->SR; USART_SendData(USART2, ch); while(USART_GetFlagStatus(USART2, USART_FLAG_TC)!= SET); }
/* ********************************************************************************************************* * 函 数 名: UartIRQ * 功能说明: 供中断服务程序调用,通用串口中断处理函数 * 形 参: _pUart : 串口设备 * 返 回 值: 无 ********************************************************************************************************* */ static void UartIRQ(UART_T *_pUart) { /* 处理接收中断 */ if (USART_GetITStatus(_pUart->uart, USART_IT_RXNE) != RESET) { /* 从串口接收数据寄存器读取数据存放到接收FIFO */ _pUart->pRxBuf[_pUart->usRxWrite] = USART_ReceiveData(_pUart->uart); if (++_pUart->usRxWrite >= _pUart->usRxBufSize) { _pUart->usRxWrite = 0; } if (_pUart->usRxCount < _pUart->usRxBufSize) { _pUart->usRxCount++; } /* 回调函数,通知应用程序收到新数据,一般是发送1个消息或者设置一个标记 */ //if (_pUart->usRxWrite == _pUart->usRxRead) if (_pUart->usRxCount == 1) { if (_pUart->ReciveNew) { _pUart->ReciveNew(); } } } /* 处理发送缓冲区空中断 */ if (USART_GetITStatus(_pUart->uart, USART_IT_TXE) != RESET) { //if (_pUart->usTxRead == _pUart->usTxWrite) if (_pUart->usTxCount == 0) { /* 发送缓冲区的数据已取完时, 禁止发送缓冲区空中断 (注意:此时最后1个数据还未真正发送完毕)*/ USART_ITConfig(_pUart->uart, USART_IT_TXE, DISABLE); /* 使能数据发送完毕中断 */ USART_ITConfig(_pUart->uart, USART_IT_TC, ENABLE); } else { /* 从发送FIFO取1个字节写入串口发送数据寄存器 */ USART_SendData(_pUart->uart, _pUart->pTxBuf[_pUart->usTxRead]); if (++_pUart->usTxRead >= _pUart->usTxBufSize) { _pUart->usTxRead = 0; } _pUart->usTxCount--; } } /* 数据bit位全部发送完毕的中断 */ else if (USART_GetITStatus(_pUart->uart, USART_IT_TC) != RESET) { //if (_pUart->usTxRead == _pUart->usTxWrite) if (_pUart->usTxCount == 0) { /* 如果发送FIFO的数据全部发送完毕,禁止数据发送完毕中断 */ USART_ITConfig(_pUart->uart, USART_IT_TC, DISABLE); /* 回调函数, 一般用来处理RS485通信,将RS485芯片设置为接收模式,避免抢占总线 */ if (_pUart->SendOver) { _pUart->SendOver(); } } else { /* 正常情况下,不会进入此分支 */ /* 如果发送FIFO的数据还未完毕,则从发送FIFO取1个数据写入发送数据寄存器 */ USART_SendData(_pUart->uart, _pUart->pTxBuf[_pUart->usTxRead]); if (++_pUart->usTxRead >= _pUart->usTxBufSize) { _pUart->usTxRead = 0; } _pUart->usTxCount--; } } }
void std_char_out(char value){ while(USART_GetFlagStatus(SERIAL0CH, USART_FLAG_TXE) == RESET); USART_SendData(SERIAL0CH, value); }