Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
HongLI_Guo
Level 1
Level 1
5 questions asked 10 sign-ins 5 replies posted

在使用过程中需要用到两个串口(SCB_UART),两个串口需要配置不同的波特率,初始化完成后,第一个初始化的串口的波特率会变成第二个初始化后的波特率,导致第一个串口无法正常工作。

波特率配置代码如下:

pclk = (uint16_t)PCLK_SCB0_CLOCK+(uint16_t)chl;//chl=0~9

/* Clock Configuration for UART */
// Assign a programmable divider
Cy_SysClk_PeriphAssignDivider((en_clk_dst_t)pclk, CY_SYSCLK_DIV_24_5_BIT, 0ul);
// Set divider value
{
uint64_t targetFreq = UART_OVERSAMPLING * boadrate;
uint64_t sourceFreq_fp5 = ((uint64_t)80000000ul << 5ull);
uint32_t divSetting_fp5 = (uint32_t)(sourceFreq_fp5 / targetFreq);
Cy_SysClk_PeriphSetFracDivider(Cy_SysClk_GetClockGroup((en_clk_dst_t)pclk),
CY_SYSCLK_DIV_24_5_BIT,
0ul,
((divSetting_fp5 & 0x1FFFFFE0ul) >> 5ul),
(divSetting_fp5 & 0x0000001Ful));
}
// Enable peripheral divider
Cy_SysClk_PeriphEnableDivider(Cy_SysClk_GetClockGroup((en_clk_dst_t)pclk), CY_SYSCLK_DIV_24_5_BIT, 0ul);

请问我该如何修改才能将两个串口(SCB_UART)配置成不同的波特率。

0 Likes
1 Solution
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

你好,

针对两个串口,您需要每个串口做单独的初始化,例如分成UART0和UART1,请注意使用的时钟不能相同,函数Cy_SysClk_PeriphAssignDivider最后一个参数可以一个用0,一个用1来区分两个UART的时钟。

View solution in original post

0 Likes
4 Replies
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

你好,

针对两个串口,您需要每个串口做单独的初始化,例如分成UART0和UART1,请注意使用的时钟不能相同,函数Cy_SysClk_PeriphAssignDivider最后一个参数可以一个用0,一个用1来区分两个UART的时钟。

0 Likes

您好,

非常感谢,问题解决了。

顺便问一下,有没有函数库说明手册可以查阅,或者类似的库函数用法说明。

0 Likes
Jimmy_L
Moderator
Moderator
Moderator
250 replies posted 250 sign-ins 50 solutions authored

你好,

在SDL的安装目录下有个docs文件夹,里面有help file,可以查询库函数,查看函数说明,例如\T2G_Sample_Driver_Library_7.9.0\docs

0 Likes

您好,

好的好的,非常感谢。

0 Likes