12
返回列表 发新帖
楼主: 优雅的猴子

[分享] K64F12虚拟串口

[复制链接]

该用户从未签到

7

主题

24

帖子

0

注册会员

Rank: 2

积分
89
最后登录
2015-8-18
 楼主| 发表于 2015-7-30 08:56:36 | 显示全部楼层
本帖最后由 优雅的猴子 于 2015-7-30 08:59 编辑
FSL_TICS_ZP 发表于 2015-7-29 08:55
对的啊,你可以设置断点,看看数据是否与你发生的一致

太谢谢你了,我按照你说的设置断点查,然后现在能通过PC输入控制LED灯了,但是新的问题来了,我想通过PC输入控制从板子输出不同频率的FlexBus,我是通过改VCO 0 Divider的值实现的,如下
  1. const clock_manager_user_config_t g_defaultClockConfigRun =
  2. {
  3.     .mcgConfig =
  4.     {
  5.         .mcg_mode           = kMcgModePEE,   // Work in PEE mode.
  6.         .irclkEnable        = true,  // MCGIRCLK enable.
  7.         .irclkEnableInStop  = false, // MCGIRCLK disable in STOP mode.
  8.         .ircs               = kMcgIrcFast,//kMcgIrcSlow, // Select IRC32k.
  9.         .fcrdiv             = 0U,    // FCRDIV is 0.

  10.         .frdiv   = 7U,
  11.         .drs     = kMcgDcoRangeSelLow,  // Low frequency range
  12.         .dmx32   = kMcgDmx32Default,    // DCO has a default range of 25%
  13.         .oscsel  = kMcgOscselOsc,       // Select OSC

  14.         .pll0EnableInFllMode = false,  // PLL0 disable
  15.         .pll0EnableInStop    = false,  // PLL0 disalbe in STOP mode
  16.         .prdiv0              = 0x13U,
  17.         .vdiv0               = 0x10U,//0x10U, //0x18U
  18.     },
  19.     .simConfig =
  20.     {
  21.         .pllFllSel = kClockPllFllSelPll,    // PLLFLLSEL select PLL.
  22.         .er32kSrc  = kClockEr32kSrcRtc,     // ERCLK32K selection, use RTC.
  23.         .outdiv1   = 0U,
  24.         .outdiv2   = 1U,
  25.         .outdiv3   = 1U,
  26.         .outdiv4   = 4U,
  27.     },
  28.     .oscerConfig =
  29.     {
  30.         .enable       = true,  // OSCERCLK enable.
  31.         .enableInStop = false, // OSCERCLK disable in STOP mode.
  32.     }
  33. };
复制代码

我通过改.vdiv0的值使得输出的FlexBus的频率不同,然后重新调用BOARD_ClockInit()
我在USB CDC Virtual COM里的程序是这样写的:
  1. void Virtual_Com_App(void)
  2. {
  3.     /* User Code */
  4.     if ((0 != g_recv_size) && (0xFFFFFFFF != g_recv_size))
  5.     {
  6.         int32_t i;

  7.         /* Copy Buffer to Send Buff */
  8.         for (i = 0; i < g_recv_size; i++)
  9.         {
  10.             USB_PRINTF("Copied: %c\n", g_curr_recv_buf[i]);
  11.             g_curr_send_buf[g_send_size++] = g_curr_recv_buf[i];
  12.                 //g_curr_send_buf[0]=1;
  13.         }

  14.         switch(g_curr_recv_buf[0]){
  15.                 case 0x31:
  16.                         BOARD_ClockInit();
  17.                         GPIO_DRV_ClearPinOutput(kGpioLED1);
  18.                         break;
  19.                 case 0x32:
  20.                         GPIO_DRV_SetPinOutput(kGpioLED1);
  21.                         break;
  22.                 }

  23.         g_recv_size = 0;
  24.     }
复制代码

如果不调用BOARD_ClockInit(),我可以一直输入,然后设置灯亮与不亮,但是如果调用BOARD_ClockInit(),就只能输一次,然后串口就无法再输入了,重新打也打不开了,请问是因为我重新设置了时钟的缘故吗?重新设置时钟会影响虚拟串口接收数据吗?
PS:我之前试过用开关中断控制改变频率,可以实现
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2015-7-30 11:09:46 | 显示全部楼层
我觉得有点奇怪,其实你就是想改变Flexbus的时钟,为什么搞得这么劳师动众呢,全部时钟重新配置呢,你只需改变OUTDIV3就可以啊,建议在改变之前,还是先禁止Flexbus模块,修改之后,再重新使能会保险一点。 屏幕截图.jpg
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

24

帖子

0

注册会员

Rank: 2

积分
89
最后登录
2015-8-18
 楼主| 发表于 2015-7-31 05:20:14 | 显示全部楼层
FSL_TICS_ZP 发表于 2015-7-30 11:09
我觉得有点奇怪,其实你就是想改变Flexbus的时钟,为什么搞得这么劳师动众呢,全部时钟重新配置呢,你只需 ...

因为我想分别输出50MHz, 40MHz, 30MHz。。。这样的FlexBus,所以只改outdiv3好像不行,要同时改MCG里的vdiv0和SIM里的outdiv3才行,不然只能2次方分频,这样的话应该是整个系统时钟都改掉了,应该是影响了USB的时钟
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2015-7-31 08:50:03 | 显示全部楼层
优雅的猴子 发表于 2015-7-31 05:20
因为我想分别输出50MHz, 40MHz, 30MHz。。。这样的FlexBus,所以只改outdiv3好像不行,要同时改MCG里的vd ...

哦,对的,如果改变了VIDIV0,还会涉及到MCGOUTCLK的修改,所以更改时需要格外注意,免得系统时钟设置崩溃
回复 支持 反对

使用道具 举报

该用户从未签到

29

主题

439

帖子

0

版主

Rank: 7Rank: 7Rank: 7

积分
720
最后登录
2015-12-29
发表于 2015-7-31 11:02:22 | 显示全部楼层
这个是最基本的功能啊
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

24

帖子

0

注册会员

Rank: 2

积分
89
最后登录
2015-8-18
 楼主| 发表于 2015-7-31 17:47:27 | 显示全部楼层
魅影迷踪 发表于 2015-7-31 11:02
这个是最基本的功能啊

请问您是说虚拟串口还是时钟设置呀?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-28 04:40 , Processed in 0.091296 second(s), 23 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表