main函式如下:
#include "gd32vf103.h"
#include "gd32vf103v_eval.h"
#include "systick.h"
#include <stdio.h>
extern uint32_t rxbuffer[];
extern uint16_t rxcount;
extern FlagStatus g_receive_complete;
int main(void)
{
/* USART interrupt configuration */
eclic_global_interrupt_enable();
eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);
eclic_irq_enable(USART0_IRQn, 1, 0);
gd_eval_com_init(USART0);
usart_interrupt_enable(USART0, USART_INT_RBNE);
while(1) {
//usart_interrupt_disable(USART0, USART_INT_RBNE);
if(g_receive_complete == SET) {
rxcount = 0;
g_receive_complete = RESET;
delay_1ms(500);
delay_1ms(500);
printf("%d\n\r",rxbuffer[0]);
printf("%d\n\r",rxbuffer[1]);
printf("%d\n\r",rxbuffer[2]);
printf("%d\n\r",rxbuffer[3]);
printf("%d\n\r",rxbuffer[4]);
}
}
}
/* retarget the C library printf function to the USART */
int _put_char(int ch)
{
usart_data_transmit(USART0, (uint8_t) ch );
while ( usart_flag_get(USART0, USART_FLAG_TBE)== RESET){
}
return ch;
}
中斷處理函式如下:(能進中斷,就是實作不了接收)
uint32_t rxbuffer[RX_BUF_SIZE];
__IO uint16_t rxcount = 0;
__IO FlagStatus g_receive_complete = RESET;
void USART0_IRQHandler(void)
{
if(RESET!=usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE))
{
/* read one byte from the receive data register */
rxbuffer[rxcount++] = (uint8_t)usart_data_receive(USART0); //
if(rxcount == RX_BUF_SIZE)
{
g_receive_complete = SET;
usart_interrupt_disable(USART0, USART_INT_RBNE);
}
}
}
串口工具顯示:只有發送,沒有接收
uj5u.com熱心網友回復:
接收使能位沒有打開?uj5u.com熱心網友回復:
你這個串口有發送,沒有接收,基本上說明不了什么。隨便接個串口模塊都可以發送。按照目前的現象看來,你的程式并沒有進入中斷。uj5u.com熱心網友回復:
建議你的程式上加上延時,這樣能保證資料完整的傳輸完成。USART_SendData(USART1, USART_RX_BUF[t]);//向串口1發送資料
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待發送結束
USART_RX_STA=0;清除標志位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/75698.html
標籤:單片機/工控
上一篇:檔案上傳漏洞(php)
下一篇:第一篇
