|
int main(void) //主函数
{
uint8_t *str;
while(1)
{
str = "Welcome to STM321111";
TData(str, 20);
}
}
void TData(uint8_t *_usBuf, uint8_t _usLen) //数据发送函数
{
uint8_t Tx_Status, Txread, Txwrite, Txcounter;
uint16_t i;
Txread = p_uart.Tx_read;
Txcounter = p_uart.Tx_counter;
//将待发送数据缓冲区写入UART发送数据缓冲区
for(i=0; i<_usLen; i++)
{
if(++Txread >= USART1_TX_BUF_SIZE)
{
Txread = 0;
}
if(++Txcounter >= USART1_TX_BUF_SIZE) //判断发送缓冲区数据个数
{
Txcounter = 0;
}
p_uart.pTxBuf[p_uart.Tx_write] = _usBuf;
if(++p_uart.Tx_write >= USART1_TX_BUF_SIZE)
{
p_uart.Tx_write = 0;
}
p_uart.Tx_counter++;
}
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
}
if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET) //中断函数
{
USART_ClearITPendingBit(USART1, USART_IT_TXE);
if(p_uart.Tx_read == p_uart.Tx_write) //没有新数据
{
USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
USART_ITConfig(USART1, USART_IT_TC, ENABLE);
}
else
{
USART_SendData(USART1, p_uart.pTxBuf[p_uart.Tx_read]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE == RESET));
if(++p_uart.Tx_read >= USART1_TX_BUF_SIZE)
{
p_uart.Tx_read = 0;
}
p_uart.Tx_counter--;
}
}
else if(USART_GetITStatus(USART1, USART_IT_TC) !=RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_TC); //清除发送完成标志位
if(p_uart.Tx_read == p_uart.Tx_write) //没有新数据
{
USART_ITConfig(USART1, USART_IT_TC, DISABLE); //关闭发送完成中断
}
else
{
USART_SendData(USART1, p_uart.pTxBuf[p_uart.Tx_read]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
if(++p_uart.Tx_read >= USART1_TX_BUF_SIZE)
{
p_uart.Tx_read = 0;
}
p_uart.Tx_counter--;
}
} |
|