請問ch57X 的串口中斷,如果接收到的數(shù)據(jù)長度和FIFO設(shè)置的一樣,是不是只能進(jìn)入U(xiǎn)ART_II_RECV_RDY,而不會(huì)觸發(fā)UART_II_RECV_TOUT?
那這樣的話UART_II_RECV_TOUT這個(gè)中斷感覺并沒有什么用?。?/p>
我的串口初始化配置:
```
? ? /* 配置UART3 */
? ? GPIOA_SetBits( GPIO_Pin_5 );
? ? GPIOA_ModeCfg( GPIO_Pin_4, GPIO_ModeIN_PU );? ? ? ? ? ? ? ? ? ?// RXD-配置上拉輸入
? ? GPIOA_ModeCfg( GPIO_Pin_5, GPIO_ModeOut_PP_5mA );? ? ? ? ? ? ? // TXD-配置推挽輸出,注意先讓IO口輸出高電平
? ? UART3_DefInit(? );
? ? UART3_BaudRateCfg( 9600 );
? ? UART3_ByteTrigCfg( UART_7BYTE_TRIG );
? ? UART3_INTCfg( ENABLE, RB_IER_RECV_RDY );
? ? PFIC_EnableIRQ( UART3_IRQn );
? ? UART3_Data.RxCount = 0;
```
我的中斷接收:
```
__attribute__( ( interrupt( "WCH-Interrupt-fast" ) ) )
__attribute__( ( section( ".highcode" ) ) )
void UART3_IRQHandler( void )
{
? ? switch ( UART3_GetITFlag(? ) )
? ? {
? ? ? ? case UART_II_RECV_RDY :? ? ? ? ? ????// 數(shù)據(jù)達(dá)到設(shè)置觸發(fā)點(diǎn)
????????????UART3_Data.RxCount += UART3_RecvString( UART3_Data.RxBuff+UART3_Data.RxCount );? ? ?// 拷貝數(shù)據(jù)
? ? ? ? ? ? break;
? ? ? ? case UART_II_RECV_TOUT :? ? ? ?????// 接收超時(shí),暫時(shí)一幀數(shù)據(jù)接收完成
? ? ? ? ? ? UART3_Data.RxCount += UART3_RecvString( UART3_Data.RxBuff+UART3_Data.RxCount );? ? ?// 拷貝結(jié)尾數(shù)據(jù)
? ? ? ? ? ? UART3_Logic_Handler(? );
????????????UART3_Data.RxCount = 0;
? ? ? ? ? ? break;
? ? ? ? default :
? ? ? ? ? ? break;
? ? }
}
```
這個(gè)代碼的效果是如果接受到的數(shù)據(jù)長度是 7 的整數(shù)倍,那只會(huì)進(jìn)入 UART_II_RECV_RDY 中斷,
其他情況,如果小于7字節(jié)會(huì)進(jìn)入?UART_II_RECV_TOUT 中斷。
如果大于7字節(jié)則會(huì)在接收完畢之前進(jìn)入n次UART_II_RECV_RDY 中斷,最后再進(jìn)入一次UART_II_RECV_TOUT 中斷。
請問7字節(jié)及其整數(shù)倍的時(shí)候只能自己判斷是不是接受完畢嗎?那UART_II_RECV_TOUT中斷沒有意義啊?