- #define UART_MAX_LEN 200
- struct
- {
- uint8_t Timeout;
- uint8_t RecvBuff[UART_MAX_LEN];
- uint8_t RecvLen;
- } SerialStr;
- void SerialInit(void)
- {
- gpio_init_type gpio_init_struct;
-
- /* enable the usart1 and gpio clock */
- crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
- crm_periph_clock_enable(CRM_USART1_PERIPH_CLOCK, TRUE);
- gpio_default_para_init(&gpio_init_struct);
- /* configure the usart1 tx/rx pin */
- gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
- gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
- gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
- gpio_init_struct.gpio_pins = GPIO_PINS_6 | GPIO_PINS_7;
- gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
- gpio_init(GPIOB, &gpio_init_struct);
-
- /* config usart1 iomux */
- gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE6, GPIO_MUX_0);
- gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE7, GPIO_MUX_0);
-
- /* config usart1 nvic interrupt */
- nvic_irq_enable(USART1_IRQn, 3, 0);
-
- /* configure usart1 param */
- usart_init(USART1, 115200, USART_DATA_8BITS, USART_STOP_1_BIT);
- usart_parity_selection_config(USART1, USART_PARITY_NONE);
- usart_hardware_flow_control_set(USART1,USART_HARDWARE_FLOW_NONE);
- usart_transmitter_enable(USART1, TRUE);
- usart_receiver_enable(USART1, TRUE);
-
- usart_interrupt_enable(USART1, USART_RDBF_INT, TRUE);
- usart_enable(USART1, TRUE);
- }
- void SerialRecvTimeout(void)
- {
- if(SerialStr.Timeout>0)
- {
- SerialStr.Timeout--;
- }
- }
- void SerialRecv(uint8_t data)
- {
- SerialStr.Timeout=5;
-
- if(SerialStr.RecvLen<UART_MAX_LEN)
- {
- SerialStr.RecvBuff[SerialStr.RecvLen++]=data;
- }
- }
- void SerialSend(uint8_t *data,uint8_t len)
- {
- for(uint8_t i=0; i<len;i++)
- {
- while (RESET == usart_flag_get(USART1, USART_TDC_FLAG));
- usart_data_transmit(USART1, data[i]);
- }
- }
- void SerialPro(void)
- {
- if(!SerialStr.Timeout&&SerialStr.RecvLen)
- {
- printf("Recv:%d,[",SerialStr.RecvLen);
- #if 1
- SerialSend(SerialStr.RecvBuff,SerialStr.RecvLen);
- #else
- for(uint8_t i=0;i<SerialStr.RecvLen;i++)
- {
- printf(" %02d",SerialStr.RecvBuff[i]);
- }
- #endif
- printf("]\r\n");
- SerialStr.RecvLen=0;
- }
- }
- void USART1_IRQHandler(void)
- {
- uint16_t ch;
-
- if(usart_flag_get(USART1, USART_RDBF_FLAG) != RESET)
- {
- ch=usart_data_receive(USART1);
- SerialRecv(ch);
- }
- }
- /* retarget the C library printf function to the USART */
- int fputc(int ch, FILE *f)
- {
- while(usart_flag_get(USART1, USART_TDC_FLAG) == RESET);
- usart_data_transmit(USART1, (uint8_t) ch);
-
- return ch;
- }
5、现象