- /**
- * @brief 加入发送队列.
- * @param 待发送的数据
- * @retval 待发送的数据
- */
- uint8_t Add_Tx1Item(uint8_t ch)
- {
- //发送队列满。发送队列满
- while(Tx1_Counter == TX1_BUFFER_SIZE);
-
- //压入数据
- Tx1_Buffer[Tx1_WriteIndex] = ch;
- //发送缓冲区写计数器移动
- Tx1_WriteIndex ++;
- if( Tx1_WriteIndex >= TX1_BUFFER_SIZE )
- {
- //写指针移动到队列头部
- Tx1_WriteIndex = 0;
- }
- //数据总数增加
- Tx1_Counter++;
-
- //使能发送中断
- USART_ITConfig(USART1,USART_IT_TXE,ENABLE);
-
- return Tx1_WriteIndex;
- }
- /**
- * @brief 返回发送队列中的字节数
- * @param 无
- * @retval 发送队列中的字节数
- */
- uint8_t Get_Tx1BufCounter(void)
- {
- return Tx1_Counter;
- }
- /**
- * @brief 从接收队列中取出数据.
- * @param None
- * @retval 被取出数据
- */
- uint8_t Get_Rx1Item(void)
- {
- uint8_t Rx1_Data;
-
- //等待,需要修改
- while(Rx1_Counter == 0);
-
- //从队列中读取数据
- Rx1_Data = Rx1_Buffer[Rx1_ReadIndex];
- //接收缓冲区读指针移动
- Rx1_ReadIndex ++;
- if(Rx1_ReadIndex >= RX1_BUFFER_SIZE)
- {
- Rx1_ReadIndex = 0;
- }
- //
- Rx1_Counter --;
- return Rx1_Data;
- }
- /**
- * @brief 返回接收队列中的字节数
- * @param 无
- * @retval 接收队列中的字节数
- */
- uint8_t Get_Rx1BufCounter(void)
- {
- return Rx1_Counter;
- }
- /**
- * @brief 清空发送队列
- * @param 无
- * @retval 无
- */
- void Clear_Tx1Buf(void)
- {
- for(uint8_t i = 0 ; i < TX1_BUFFER_SIZE ; i++)
- {
- Tx1_Buffer = 0;
- }
- Tx1_Counter = 0;
- }
- /**
- * @brief 清空接收队列
- * @param 无
- * @retval 无
- */
- void Clear_Rx1Buf(void)
- {
- for(uint8_t i = 0 ; i < RX1_BUFFER_SIZE ; i++)
- {
- Rx1_Buffer = 0;
- }
-
- Rx1_Counter = 0;
- }
- /**
- * @brief USART1中断.
- * @param None
- * @retval None
- */
- void USART1_IRQHandler(void)
- {
- uint8_t ch;
-
- //接收中断
- if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
- {
- //读取数据
- ch = USART_ReceiveData(USART1);
-
- //清除接收中断标志位
- //USART_ClearFlag(USART1,USART_FLAG_RX1NE);
- //接收缓冲区数据个数递增
- Rx1_Counter++;
-
- //数据填入接收队列
- Rx1_Buffer[Rx1_WriteIndex] = ch;
-
- Rx1_WriteIndex ++;
- if(Rx1_WriteIndex >= RX1_BUFFER_SIZE)
- {
- Rx1_WriteIndex = 0;
- }
- //队列溢出
- if(Rx1_Counter >= RX1_BUFFER_SIZE)
- {
- //数据作废,修改
- //Rx1_Counter = 0;
- //溢出标志置位
- Rx1_BufOverflow = 1;
- }
- }
-
- //发送中断
- if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
- {
- //清除接收中断标志位
- //USART_ClearFlag(USART1,USART_FLAG_TX1E);
- //存在未发送的数据
- if(Tx1_Counter > 0)
- {
- //发送数据
- USART_SendData(USART1, Tx1_Buffer[Tx1_ReadIndex]);
- //发送数据总数递减
- Tx1_Counter --;
- Tx1_ReadIndex++;
- //回到缓冲区开头
- if(Tx1_ReadIndex >= TX1_BUFFER_SIZE)
- {
- Tx1_ReadIndex = 0;
- }
- }
- else
- {
- //无发送数据,关闭发送中断
- USART_ITConfig(USART1,USART_IT_TXE,DISABLE);;
- }
- }
- }
- int fputc(int ch, FILE * f)
- {
- //通过串口发送数据
- Add_Tx1Item((uint8_t)ch);
-
- return ch;
- }
|