完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好!经过长时间的等待,我终于得到了新的MCU,并希望与之通信。我想用UART和DMA发送字符串。我尝试了很多次,但没有发送字符串;只能发送一个字符。如何发送可变大小的字符串?你有什么代码示例吗?P.S.:我不想使用和声。这是我的代码:UART init代码:我使用UART4为UTAR4MY TX函数设置TXDMA0:
以上来自于百度翻译 以下为原文 Hello everybody! After long waiting, I finally got my new MCU and want to communicate with it. I want to send string to using UART and DMA. I tried so many times but didnt send strings; I can only send one char. How can I send variable sized string? Do you have any code example for that? P.S.: I dont want to use HARMony. Here is my code: UART Init Code: I'm Using UART4 for TX void InitUART(void) { // UART init TRISEbits.TRISE0 = 1; // RE0 for RX TRISEbits.TRISE1 = 0; // RE1 for TX TRISDbits.TRISD8 = 0; // RS485 DIR IO_UnLock(); U3RXRbits.U3RXR = 0b01100; // RE0 for UART3 RX RPE1Rbits.RPE1R = 0b00010; // RE1 for UART4 TX IO_Lock(); U3MODE = 0x0000; U3STAbits.URXEN = 1; // Enable RX U3STAbits.UTXEN = 0; // Disable TX U3BRG = (PBCLK/(16*BAUD_RATE)) - 1; U4MODE = 0x0000; U4STAbits.URXEN = 0; // Disable RX U4STAbits.UTXEN = 1; // Enable TX U4BRG = (PBCLK/(16*BAUD_RATE)) - 1; // Interrupt IPC15bits.U3RXIP = 3; // Priority 3 IPC15bits.U3RXIS = 2; // Sub-Priority 2 IFS2bits.U4TXIF = 0; // Clear the Transmit Interrupt Flag IEC2bits.U4TXIE = 0; // Disable Transmit Interrupts IFS1bits.U3RXIF = 0; // Clear the Recieve Interrupt Flag IEC1bits.U3RXIE = 1; // Enable Recieve Interrupts U3MODEbits.ON = 1; // Uart3 On U4MODEbits.ON = 1; // Uart4 On InitDMA0(); } DMA0 Setup for UART4 void InitDMA0(void) { IEC2bits.DMA0IE = 0; IFS2bits.DMA0IF = 0; DCH0CON = 0x0000; DCH0ECON = 0x0000; DCH0CONbits.CHPRI = 3; DCH0ECONbits.CHSIRQ = _UART4_TX_VECTOR; // IRQ UART4 TX DCH0ECONbits.SIRQEN = 0; // DMA's interruption disable DCH0SSA = 1; DCH0DSA = VirtToPhys((void*)&U4TXREG); DCH0SSIZ = 300; DCH0DSIZ = 300; // Destination size 1 bytes DCH0CSIZ = 300; // 1 bytes transferred per event DCH0INT = 0; // Any Interruption DCH0CONbits.CHEN = 0; // Disable DMA channel } My TX Function: unsigned char UART_String(unsigned char *s, unsigned int Length) { if(U4STAbits.UTXBF==0) { DCH0CONbits.CHEN = 0; DCH0SSA = KVA_TO_PA(&*s); DCH0DSA = KVA_TO_PA(&U4TXREG); DCH0DSIZ = 1; DCH0CSIZ = 1; DCH0SSIZ = Length; DCH0ECONbits.CHSIRQ = _UART4_TX_VECTOR; if(DCH0ECONbits.CFORCE == 0) { DCH0ECONbits.CFORCE = 1; DCH0CONbits.CHEN = 1; } } } |
|
相关推荐
2个回答
|
|
|
|
|
|
是的,我做到了。我发送非常长的字符串没有DMA。
以上来自于百度翻译 以下为原文 Yes I did that. I send very long string without DMA. |
|
|
|
只有小组成员才能发言,加入小组>>
5178 浏览 9 评论
2003 浏览 8 评论
1931 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3177 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2228 浏览 5 评论
738浏览 1评论
622浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
509浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
636浏览 0评论
533浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 04:46 , Processed in 1.187452 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号