沁恒CH32V307VCT6问题总结

        最近我在使用沁恒CH32V307VCT6芯片进行项目开发,本文旨在记录我在开发过程中遇到的问题及其解决方案。

1.ch32使用中断串口接收,只能接收一个字符,之后卡死整个程序。

现象:使用以下代码接收字符串,仅能输出1次c,之后程序卡死。

//串口2中断
void USART2_IRQHandler(void)
{
    u8 temp;
    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
    {
        temp=USART_ReceiveData(USART2);
​
        switch(rfid_index)
        {
            case 0:
                if(temp == 0x04)
                    rfid_index++;
                printf("c\r\d");//调试,输出c
            break;
​
            case 1:
​
                if(temp == 0x0c)
                    rfid_index++;
​
                else
                    rfid_index = 0;
                printf("d\r\d");//调试,输出d
            break;
​
            case 2:
                if(temp == 0x02)
                    rfid_index++;
                else
                    rfid_index = 0;
            break;
​
            case 3:
                if(temp == 0x30)
                    rfid_index++;
                else
                    rfid_index = 0;
            break;
​
            case 4:
                if(temp == 0x00)
                    rfid_index++;
                else
                    rfid_index = 0;
            break;
​
            case 5://5和6卡的类型
                if(temp == 0x04)
                    rfid_index++;
                else
                    rfid_index = 0;
            break;
​
            case 6:
                if(temp == 0x00)
                    rfid_index++;
                else
                    rfid_index = 0;
            break;
​
            case 7://7~9为卡号
                rfid_temp[0]=temp;
                rfid_index++;
            break;
​
            case 8:
                rfid_temp[1]=temp;
                rfid_index++;
            break;
​
            case 9:
                rfid_temp[2]=temp;
                rfid_index++;
            break;
​
            case 10:
                rfid_temp[3]=temp;
                rfid_index = 0;
 
            break;
​
        }
    }
    USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
 

解决方法:在main.c文件前加入对应的快速中断函数。

例如:

void USART3_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));//串口3快速中断
void USART2_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));//串口2快速中断

2.ch32使用printf,不输出数据

解决办法:看是不是打印数据最后没有\r\n。如果是添加上去即可输出。

例如:

printf("hello\r\n");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路弥行至

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值