一、串口发送
函数:usart_data_transmit
参数1:串口USARTx
参数2:发送缓冲区
示例代码如下:
cpp
/*
函数功能:串口连续发送字节
参数1:发送缓冲区 可以char类型
参数2:缓冲区大小 strlen计算
*/
char txbuff[64]; //发送缓冲区
void uasrt_buf_trans(uint8_t *buff,uint8_t data_size)
{
uint32_t i;
for(i= 0; i < data_size; i++)
{
usart_data_transmit(USART1,buff[i]);
while(usart_flag_get(USART1,USART_TDC_FLAG) == RESET);
}
}
官方提供的函数usart_data_transmit只能发送一位,用上面这个函数可以连续发送。
二、串口接收中断
ps:接收中断一定要在void wk_usart1_init(void)初始化函数里面添加使能中断,否则根本进不了中断。
usart_interrupt_enable(USART1,USART_RDBF_INT,TRUE);
usart_interrupt_enable(USART1,USART_IDLE_INT,TRUE);
中断接收代码如下
cpp
uint8_t rx_buff[6];
uint8_t rx_cnt;
uint8_t rx_flag ;
/**
* @brief this function handles USART1 handler.
* @param none
* @retval none
*/
void USART1_IRQHandler(void)
{
/* add user code begin USART1_IRQ 0 */
uint32_t temp;
if(usart_flag_get(USART1,USART_RDBF_FLAG) != RESET) //接收中断响应
{
rx_buff[rx_cnt++] = USART1 -> dt; //将dt寄存器的值读到缓冲器里
}
if(usart_flag_get(USART1,USART_IDLEF_FLAG) != RESET) //USART总线空闲时
{
temp = USART1 -> sts; //清空空闲中断标志位
temp = USART1 -> dt; //清空空闲中断标志位
temp &= 0;
rx_flag = 1;
}
/* add user code end USART1_IRQ 0 */
/* add user code begin USART1_IRQ 1 */
/* add user code end USART1_IRQ 1 */
}