[Kinetis] K22系列串口程序

[复制链接]
2453|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中运行就不正常。
 楼主| 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
FSL_TICS_ZJJ 发表于 2015-11-24 14:02 | 显示全部楼层
xytrd 发表于 2015-11-24 10:01
void UART1_INI(void)
{
   

那你封装成函数,debug的时候,是否能进入函数?
单步调试看看,各个代码有没有执行到?
 楼主| xytrd 发表于 2015-11-24 14:05 | 显示全部楼层
都执行到了。到串口接收就有问题。
 楼主| xytrd 发表于 2015-11-24 14:07 | 显示全部楼层
你可以将KDS里UART例程调试下,将初始化部分用函数封装,就有问题。
我用的MK22FN512VLH12
Tennasi 发表于 2015-11-24 17:39 | 显示全部楼层
楼主单步调试一下看看能不能解决问题啊
lovecat2015 发表于 2015-11-24 17:51 | 显示全部楼层
是不是初始化的前后顺序不一致?
cowboy2014 发表于 2015-11-24 19:53 | 显示全部楼层
这等怪事会出现?是不是位置放错了
 楼主| xytrd 发表于 2015-11-25 20:03 | 显示全部楼层
还没有解决,单步调试是一样的。
就uart初始化不能用函数封装,其他功能都OK。
无语中。。。。。。。。。。
小猫爱吃鱼 发表于 2015-11-25 20:22 | 显示全部楼层
xytrd 发表于 2015-11-25 20:03
还没有解决,单步调试是一样的。
就uart初始化不能用函数封装,其他功能都OK。
无语中。。。。。。。。。。 ...

这个问题确实有点奇怪啊,楼主不妨一句一句的封装,看看到底是哪句出了问题
ccw1986 发表于 2015-11-29 21:08 | 显示全部楼层
是不是顺序的问题啊?
FSL_TICS_ZJJ 发表于 2015-12-10 14:56 | 显示全部楼层
xytrd 发表于 2015-11-25 20:03
还没有解决,单步调试是一样的。
就uart初始化不能用函数封装,其他功能都OK。
无语中。。。。。。。。。。 ...

你没有开启优化呢?把优化给关掉试试。
追逐浪花 发表于 2015-12-12 17:23 | 显示全部楼层
同问,如果不用microlib的话会不会有这个问题呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

51

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部