打印
[Kinetis]

K22系列串口程序

[复制链接]
1978|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xytrd|  楼主 | 2015-11-23 15:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
按照KDS的例程编写程序,串口初始化程序如果用函数封装起来,再放在main()函数中初始化,不能成功,只有将初始化部分代码放到main()函数中初始,就运行正常。
   edma_state_t                state;
  uart_edma_state_t           uartStateEdma;
   
  edma_user_config_t userConfig = {
        .chnArbitration  = kEDMAChnArbitrationRoundrobin,
        .notHaltOnError  = false
    };
  
  uart_edma_user_config_t uartConfig = {
        .bitCountPerChar = kUart8BitsPerChar,
        .parityMode      = kUartParityDisabled,
        .stopBitCount    = kUartOneStopBit,
        .baudRate        = UART1_BAUD
    };
   
  EDMA_DRV_Init(&state, &userConfig);
  UART_DRV_EdmaInit(1, &uartStateEdma, &uartConfig);

这部分函数用函数封装起来初始化就异常。

还有接收buf接收满后,不能更新buf数据。

相关帖子

沙发
小狗爱吃骨头| | 2015-11-23 16:52 | 只看该作者
这就很奇怪了啊,你封装的函数有没有声明呢

使用特权

评论回复
板凳
侣行天下| | 2015-11-23 20:51 | 只看该作者
能把整个工程贴出来吗,上面的代码看不出啥来

使用特权

评论回复
地板
xytrd|  楼主 | 2015-11-24 09:59 | 只看该作者
void UART1_INI(void)
{
   edma_state_t                state;
   uart_edma_state_t           uartStateEdma;
   
  edma_user_config_t userConfig = {
        .chnArbitration  = kEDMAChnArbitrationRoundrobin,
        .notHaltOnError  = false
    };
  
  uart_edma_user_config_t uartConfig = {
        .bitCountPerChar = kUart8BitsPerChar,
        .parityMode      = kUartParityDisabled,
        .stopBitCount    = kUartOneStopBit,
        .baudRate        = UART1_BAUD
    };
   
  EDMA_DRV_Init(&state, &userConfig);
  UART_DRV_EdmaInit(1, &uartStateEdma, &uartConfig);
}

int main(void)
{  

    uint32_t                    byteCountBuff;  
    hardware_init();
    NVIC_SetPriorityGrouping(4);
   GPIO_DRV_ClearPinOutput(kGpioLED1);  //测试用例
   GPIO_DRV_SetPinOutput(kGpioLED1);     //测试用例
   GPIO_DRV_ClearPinOutput(kGpioLED2);  //测试用例
   GPIO_DRV_SetPinOutput(kGpioLED2);//测试用例

  UART1_INI();

while(1)
{
          UART_DRV_EdmaReceiveData(1,buffStart,byteCountBuff);
  
          UART_DRV_EdmaSendData(1, buffStart, byteCountBuff);
}

}

如果把UART1_INI中的内容移植到main里面程序运行OK,但是放到UART1_INI中运行就不正常。

使用特权

评论回复
5
xytrd|  楼主 | 2015-11-24 10:01 | 只看该作者
void UART1_INI(void)
{
   
}

int main(void)
{  

    uint32_t                    byteCountBuff;  
    hardware_init();
    NVIC_SetPriorityGrouping(4);
   GPIO_DRV_ClearPinOutput(kGpioLED1);  //测试用例
   GPIO_DRV_SetPinOutput(kGpioLED1);     //测试用例
   GPIO_DRV_ClearPinOutput(kGpioLED2);  //测试用例
   GPIO_DRV_SetPinOutput(kGpioLED2);//测试用例

edma_state_t                state;
   uart_edma_state_t           uartStateEdma;
   
  edma_user_config_t userConfig = {
        .chnArbitration  = kEDMAChnArbitrationRoundrobin,
        .notHaltOnError  = false
    };
  
  uart_edma_user_config_t uartConfig = {
        .bitCountPerChar = kUart8BitsPerChar,
        .parityMode      = kUartParityDisabled,
        .stopBitCount    = kUartOneStopBit,
        .baudRate        = UART1_BAUD
    };
   
  EDMA_DRV_Init(&state, &userConfig);
  UART_DRV_EdmaInit(1, &uartStateEdma, &uartConfig);

while(1)
{
          UART_DRV_EdmaReceiveData(1,buffStart,byteCountBuff);
  
          UART_DRV_EdmaSendData(1, buffStart, byteCountBuff);
}

}

这样就运行OK

使用特权

评论回复
6
FSL_TICS_ZJJ| | 2015-11-24 14:02 | 只看该作者
xytrd 发表于 2015-11-24 10:01
void UART1_INI(void)
{
   

那你封装成函数,debug的时候,是否能进入函数?
单步调试看看,各个代码有没有执行到?

使用特权

评论回复
7
xytrd|  楼主 | 2015-11-24 14:05 | 只看该作者
都执行到了。到串口接收就有问题。

使用特权

评论回复
8
xytrd|  楼主 | 2015-11-24 14:07 | 只看该作者
你可以将KDS里UART例程调试下,将初始化部分用函数封装,就有问题。
我用的MK22FN512VLH12

使用特权

评论回复
9
Tennasi| | 2015-11-24 17:39 | 只看该作者
楼主单步调试一下看看能不能解决问题啊

使用特权

评论回复
10
lovecat2015| | 2015-11-24 17:51 | 只看该作者
是不是初始化的前后顺序不一致?

使用特权

评论回复
11
cowboy2014| | 2015-11-24 19:53 | 只看该作者
这等怪事会出现?是不是位置放错了

使用特权

评论回复
12
xytrd|  楼主 | 2015-11-25 20:03 | 只看该作者
还没有解决,单步调试是一样的。
就uart初始化不能用函数封装,其他功能都OK。
无语中。。。。。。。。。。

使用特权

评论回复
13
小猫爱吃鱼| | 2015-11-25 20:22 | 只看该作者
xytrd 发表于 2015-11-25 20:03
还没有解决,单步调试是一样的。
就uart初始化不能用函数封装,其他功能都OK。
无语中。。。。。。。。。。 ...

这个问题确实有点奇怪啊,楼主不妨一句一句的封装,看看到底是哪句出了问题

使用特权

评论回复
14
ccw1986| | 2015-11-29 21:08 | 只看该作者
是不是顺序的问题啊?

使用特权

评论回复
15
FSL_TICS_ZJJ| | 2015-12-10 14:56 | 只看该作者
xytrd 发表于 2015-11-25 20:03
还没有解决,单步调试是一样的。
就uart初始化不能用函数封装,其他功能都OK。
无语中。。。。。。。。。。 ...

你没有开启优化呢?把优化给关掉试试。

使用特权

评论回复
16
追逐浪花| | 2015-12-12 17:23 | 只看该作者
同问,如果不用microlib的话会不会有这个问题呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

51

帖子

1

粉丝