以解決了 !!!! 在 main.c 裡面 增加
if(ok_flag = enable)
{
unsigned char *ptemp = NULL;
ptemp = pbuffer_in_usb;
UserToPMABufferCopy(ptemp, ENDP1_TXADDR, 3);//usart_2_usb_count);
SetEPTxCount(ENDP1, 3);
}
ok_flog是自己新增,意思是當我完成接受buffier_out資料(來自於PC端的rs232值)之後,設定ok_flag = enable,
在hw_config.c
void usb_2_usart_send_data(void)
{
if (count_out == 0)
{
USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
SetEPRxValid(ENDP3);
ok_flag=1; // < --- 此為新增
}
else
{
USART1->DR = *pbuffer_out_usart & (uint16_t)0x01FF;
pbuffer_out_usart++;
count_out--;
}
心得 : 這個問題我卡的有點久,慚愧慚愧,不過 ST網站上的範例,真的不是百分百的適用,為什麼要這樣新增?? 因為原生的以下程式的問題 :
void usart_2_usb_send(void)
{
unsigned char *ptemp = NULL;
unsigned char * temp1;
unsigned int temp2;
if (pbuffer_in_usb == &buffer_in[BUFFER_SIZE])
pbuffer_in_usb = buffer_in;
temp1 = pbuffer_in_usart;
if(pbuffer_in_usb == temp1)
{
usart_2_usb_process = WAIT_USART2USB_END; // no data needed to send from USB
usart_2_usb_complete = TRUE;
return; // 一值卡在這邊 return
}
else if(pbuffer_in_usb > temp1) // if the pbuffer_in_usart is rollback
{
usart_2_usb_count = &buffer_in[BUFFER_SIZE] - pbuffer_in_usb;
}
else
{
temp2 = (unsigned int)pbuffer_in_usart;
temp2 = temp2 - (unsigned int)pbuffer_in_usb;
usart_2_usb_count = temp2;
}
if (usart_2_usb_count > VIRTUAL_COM_PORT_DATA_SIZE)
{
ptemp = pbuffer_in_usb;
UserToPMABufferCopy(ptemp, ENDP1_TXADDR, VIRTUAL_COM_PORT_DATA_SIZE);
SetEPTxCount(ENDP1, VIRTUAL_COM_PORT_DATA_SIZE);
usart_2_usb_count -= VIRTUAL_COM_PORT_DATA_SIZE;
pbuffer_in_usb += VIRTUAL_COM_PORT_DATA_SIZE;
}
else
{
ptemp = pbuffer_in_usb;
UserToPMABufferCopy(ptemp, ENDP1_TXADDR, usart_2_usb_count);
SetEPTxCount(ENDP1, usart_2_usb_count);
temp2 = usart_2_usb_count;
pbuffer_in_usb += temp2;
usart_2_usb_count = 0;
}
usart_2_usb_process = WAIT_USART2USB_END;
SetEPTxValid(ENDP1);
}
請問各位大大有比較熟捻這段code的人 可以大家一起討論這段的問題嗎??
|