This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
硬件平台:launchPad TMS570ls12x
软件:我是按照HAL code generator 的帮助文档中的教程操作的,结果成功了,串口功能使用正常,但是该教程是针对SCI2的,
如图一:
所以我照葫芦画瓢,重新新建了CCS工程,以及使用HAL code generator 使能了SCI,
如图二
main.c代码如下
/* USER CODE BEGIN (0) */
/* USER CODE END */
/* Include Files */
#include "sys_common.h"
/* USER CODE BEGIN (1) */
#include "gio.h"
#include "reg_sci.h"
#include "sci.h"
#define TSIZE1 10
uint8 TEXT1[TSIZE1]= {'H','E','R','C','U','L','E','S',' ',' '};
#define TSIZE2 18
uint8 TEXT2[TSIZE2]= {'M','I','C','R','O','C','O','N','T','R','O','L','L','E','R','S',' ',' '};
#define TSIZE3 19
uint8 TEXT3[TSIZE3]= {'T','E','X','A','S',' ','I','N','S','T','R','U','M','E','N','T','S','\n','\r'};
void sciDisplayText(sciBASE_t *sci, uint8 *text, uint32 length);
void wait(uint32 time);
#define UART sciREG
/* USER CODE END */
/** @fn void main(void)
* @brief Application main function
* @note This function is empty by default.
*
* This function is called after startup.
* The user can use this function to implement the application.
*/
/* USER CODE BEGIN (2) */
void wait(uint32 time);
/* USER CODE END */
int main(void)
{
/* USER CODE BEGIN (3) */
gioInit();
sciInit();
while(1)
{
sciDisplayText(UART,&TEXT1[0],TSIZE1); /* send text code 1 */
sciDisplayText(UART,&TEXT2[0],TSIZE2); /* send text code 2 */
sciDisplayText(UART,&TEXT3[0],TSIZE3); /* send text code 3 */
gioToggleBit(gioPORTB, 1);
gioToggleBit(gioPORTB, 2);
wait(5000000);
}
/* USER CODE END */
return 0;
}
/* USER CODE BEGIN (4) */
void sciDisplayText(sciBASE_t *sci, uint8 *text,uint32 length)
{
while(length--)
{
while ((UART->FLR & 0x4) == 4); /* wait until busy */
sciSendByte(UART,*text++); /* send out text */
};
}
void wait(uint32 time)
{
while(time)
{
time--;
}
}
/* USER CODE END */
然后生成了代码,并在main函数中参照SCI2修改了相应的代码.但是用示波器测量SCITX端口发现始终为低电平,没有任何数据信号.
请教一下大家,SCI的使用跟SCI2有什么需要特别注意的地方么?
void sciInit(void) { /* USER CODE BEGIN (2) */ /* USER CODE END */ /** @b initialize @b SCI */ /** - bring SCI out of reset */ sciREG->GCR0 = 0U; sciREG->GCR0 = 1U; sciREG->GCR1 &= ~(1<<8u); /** - Disable all interrupts */ sciREG->CLEARINT = 0xFFFFFFFFU; sciREG->CLEARINTLVL = 0xFFFFFFFFU; /** - global control 1 */ sciREG->GCR1 = (uint32)((uint32)1U << 25U) /* enable transmit */ | (uint32)((uint32)1U << 24U) /* enable receive */ | (uint32)((uint32)1U << 5U) /* internal clock (device has no clock pin) */ | (uint32)((uint32)(1U-1U) << 4U) /* number of stop bits */ | (uint32)((uint32)0U << 3U) /* even parity, otherwise odd */ | (uint32)((uint32)0U << 2U) /* enable parity */ | (uint32)((uint32)1U << 1U) /* asynchronous timing mode */ | (uint32)((uint32)1U << 16U); /** - set baudrate */ sciREG->BRS = 520U; /* baudrate */ /** - transmission length */ sciREG->FORMAT = 8U - 1U; /* length */ /** - set SCI pins functional mode */ sciREG->PIO0 = (uint32)((uint32)1U << 2U) /* tx pin */ | (uint32)((uint32)1U << 1U); /* rx pin */ /** - set SCI pins default output value */ sciREG->PIO3 = (uint32)((uint32)0U << 2U) /* tx pin */ | (uint32)((uint32)0U << 1U); /* rx pin */ /** - set SCI pins output direction */ sciREG->PIO1 = (uint32)((uint32)0U << 2U) /* tx pin */ | (uint32)((uint32)0U << 1U); /* rx pin */ /** - set SCI pins open drain enable */ sciREG->PIO6 = (uint32)((uint32)0U << 2U) /* tx pin */ | (uint32)((uint32)0U << 1U); /* rx pin */ /** - set SCI pins pullup/pulldown enable */ sciREG->PIO7 = (uint32)((uint32)0U << 2U) /* tx pin */ | (uint32)((uint32)0U << 1U); /* rx pin */ /** - set SCI pins pullup/pulldown select */ sciREG->PIO8 = (uint32)((uint32)1U << 2U) /* tx pin */ | (uint32)((uint32)1U << 1U); /* rx pin */ /** - set interrupt level */ sciREG->SETINTLVL = (uint32)((uint32)0U << 26U) /* Framing error */ | (uint32)((uint32)0U << 25U) /* Overrun error */ | (uint32)((uint32)0U << 24U) /* Parity error */ | (uint32)((uint32)0U << 9U) /* Receive */ | (uint32)((uint32)0U << 8U) /* Transmit */ | (uint32)((uint32)0U << 1U) /* Wakeup */ | (uint32)((uint32)0U << 0U); /* Break detect */ /** - set interrupt enable */ sciREG->SETINT = (uint32)((uint32)0U << 26U) /* Framing error */ | (uint32)((uint32)0U << 25U) /* Overrun error */ | (uint32)((uint32)0U << 24U) /* Parity error */ | (uint32)((uint32)0U << 9U) /* Receive */ | (uint32)((uint32)0U << 1U) /* Wakeup */ | (uint32)((uint32)0U << 0U); /* Break detect */ /** - initialize global transfer variables */ g_sciTransfer_t[0U].mode = (uint32)0U << 8U; g_sciTransfer_t[0U].tx_length = 0U; g_sciTransfer_t[0U].rx_length = 0U; /** - Finaly start SCI */ sciREG->GCR1 |= 0x80U; /* USER CODE BEGIN (3) */ /* USER CODE END */ }
这是HCG生成的SCI初始化代码
Hi Chongyang,
检查一下SCI Port配置,将TX pin配置成输出看一下,检查一下是不是复用关系没有选对?
另外,根据你选用的芯片型号,看一下对应的数据手册,Check一下,是不是SCI存在复用关系,而SCI2没有被复用?