查看: 12929|回复: 8

FM33LC025使用UART4遇到的问题

[复制链接]

6

主题

25

帖子

124

积分

中级工程师

Rank: 2

积分
124
发表于 2021-3-8 14:11:46 | 显示全部楼层 |阅读模式
//仿UART0例程写的UART4的程序,发送接收中断都是能,就是不能进发送中断
void UART4_IRQHandler(void)
{
        u8 tmp08;
        u8 i,j;
   
        //FL_UART_DisableIT_TXBuffEmpty(UART0);
        //接收中断处理
        if((ENABLE == FL_UART_IsEnabledIT_RXBuffFull(UART4))
                &&(SET == FL_UART_IsActiveFlag_RXBuffFull(UART4)))
                 {
                   //中断转发接收到的数据
                   tmp08 = FL_UART_ReadRXBuff(UART4);//接收中断标志可通过读取rxreg寄存器清除
                 
                 }
       
        //发送中断处理
        if((ENABLE == FL_UART_IsEnabledIT_TXShiftBuffEmpty(UART4))      //疑惑的地方,中断一直进不来。
                &&(SET == FL_UART_IsActiveFlag_TXShiftBuffEmpty(UART4)))
          {
                  //发送中断标志可通过写txreg寄存器清除或txif写1清除
                  //发送指定长度的数据
                  if(UART4Op.TxOpc < UART4Op.TxLen)
                        {
                                 FL_UART_WriteTXBuff(UART4, UART4Op.TxBuf[UART4Op.TxOpc]); //发送一个数据
                              UART4Op.TxOpc++;
                         }
                        else
                        {
                               SEND_OVER_FLAG=1;
                               FL_UART_DisableIT_TXShiftBuffEmpty(UART4);  
                               FL_UART_EnableIT_RXBuffFull(UART4);
                         }
                  FL_UART_ClearFlag_TXShiftBuffEmpty(UART4);        //清除发送中断标志
          }
}


void Uart4_Init(void)
  {
               FL_GPIO_InitTypeDef GPIO_InitStruct = {0};
               FL_UART_InitTypeDef UART_InitStruct = {0};
               
               //PA0:UART0-RX   PA1:UART0-TX
                GPIO_InitStruct.pin        = FL_GPIO_PIN_0|FL_GPIO_PIN_1;
                GPIO_InitStruct.mode       = FL_GPIO_MODE_DIGITAL;
                GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;         //推挽输出
                GPIO_InitStruct.pull       = DISABLE;
                GPIO_InitStruct.remapPin   = DISABLE;
                FL_GPIO_Init(GPIOA, &GPIO_InitStruct);               
               
                //UART_InitStruct.clockSrc          = FL_RCC_GROUP3_BUSCLK_UART4;
                UART_InitStruct.baudRate            = 38400;                                                                        //波特率
                UART_InitStruct.dataWidth           = FL_UART_DATA_WIDTH_8B;                                      //数据位数
                UART_InitStruct.stopBits            = FL_UART_STOP_BIT_WIDTH_1B;                                  //停止位
                UART_InitStruct.parity              = FL_UART_PARITY_NONE;                                        //奇偶校验
                UART_InitStruct.transferDirection   = FL_UART_DIRECTION_TX_RX;                  //接收-发送使能
            
                FL_UART_Init(UART4, &UART_InitStruct);   
                FL_UART_EnableIT_RXBuffFull(UART4);   
                FL_UART_EnableIT_TXShiftBuffEmpty(UART4);
                 /*NVIC中断配置*/
                NVIC_DisableIRQ(UART4_IRQn);
                NVIC_SetPriority(UART4_IRQn,2);//中断优先级配置
                NVIC_EnableIRQ(UART4_IRQn);       
   }

回复

使用道具 举报

154

主题

846

帖子

4624

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4624
发表于 2021-3-9 09:14:06 | 显示全部楼层
接收中断能不能进。 发送必须将第一个字节写入发送寄存器,才能产生中断。不写入是不会产生的
回复

使用道具 举报

6

主题

25

帖子

124

积分

中级工程师

Rank: 2

积分
124
 楼主| 发表于 2021-3-9 09:48:35 | 显示全部楼层
顾博文 发表于 2021-3-9 09:14
接收中断能不能进。 发送必须将第一个字节写入发送寄存器,才能产生中断。不写入是不会产生的 ...

程序就是发送第一个字节,然后进入中断后再鱼贯发送。接收还没有试。
回复

使用道具 举报

6

主题

25

帖子

124

积分

中级工程师

Rank: 2

积分
124
 楼主| 发表于 2021-3-9 10:04:44 | 显示全部楼层
顾博文 发表于 2021-3-9 09:14
接收中断能不能进。 发送必须将第一个字节写入发送寄存器,才能产生中断。不写入是不会产生的 ...

请问是不是串口时钟来源需要设置,我看例程里串口0,1都有赋值,串口4,5没有。
回复

使用道具 举报

6

主题

25

帖子

124

积分

中级工程师

Rank: 2

积分
124
 楼主| 发表于 2021-3-9 10:12:23 | 显示全部楼层
顾博文 发表于 2021-3-9 09:14
接收中断能不能进。 发送必须将第一个字节写入发送寄存器,才能产生中断。不写入是不会产生的 ...

已经找到问题,谢谢顾工,是自己粗心了,发送的串口号搞错了,不好意思。
回复

使用道具 举报

1

主题

6

帖子

27

积分

初级工程师

Rank: 1

积分
27
发表于 2021-4-9 13:40:37 | 显示全部楼层
借楼问一下,LC015使用串口4进行收发的时候发现数据错误,但是同样的配置我使用LC046是可以的,这两个芯片有什么不同吗
回复

使用道具 举报

1

主题

6

帖子

27

积分

初级工程师

Rank: 1

积分
27
发表于 2021-4-9 13:51:58 | 显示全部楼层
借楼询问,我在使用LC015的UART4时收发数据都错误,收发都行,但是数据对不上。但是同样的配置在LC046上可以使用,请问这两个芯片有什么区别吗,明明属于同一份手册的啊
回复

使用道具 举报

154

主题

846

帖子

4624

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4624
发表于 2021-4-12 08:43:27 | 显示全部楼层
齐天大圣 发表于 2021-4-9 13:51
借楼询问,我在使用LC015的UART4时收发数据都错误,收发都行,但是数据对不上。但是同样的配置在LC046上可 ...

没有任何区别。按照你的说法,硬件上的问题居多。 你可以直接将原先lc046的程序 烧写如lc015看看。
回复

使用道具 举报

3

主题

4

帖子

411

积分

高级工程师

Rank: 3Rank: 3

积分
411
发表于 2021-5-24 15:19:10 | 显示全部楼层
UART4时钟需要设置吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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