完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
大家好。我试图在我的pic32mx(PIC32MX795F512L)和我的电脑(窗口和串行到u***转换器)之间建立串行通信(UART)。我触发RX中断有困难,我知道我的电脑正在发送数据。我打开LED只是想看看中断是否正常,但是什么也没发生。这是我的代码,如果某人能对这个话题给出一些提示,我将不胜感激。//////////////////////////////////////CODE/////////////////////////////pragma config FPLLIDIV=DIV_10//PLL输入分配器(10xDivider)#pragma配置FPLLMUL=MUL_20//PLL乘法器(20x乘法器)\\\\\\\\MUL_20///PLL乘法器(20x乘法器)\\\\\\\\\\\\\\\24242424242424242424内部外部切换(启用)#pragma配置PO外部切换(启用)\\\\\\\\\24242424语法切换配置POSCMO配置POSCMOD = XT/\\\\\\\\\\\\\\\\SWDTEN位控制)//DEVCFG0#pragma配置DEBUG=OFF//后台调试器启用(调试器被禁用)#pragma配置ICESEL=ICS_PGx2//ICE/ICD命令通道选择(与PGC2/PGD2共享的ICE EMUC2/EMUD2管脚)#pragma配置PWP=OFF//程序闪存保护(禁用)#pragma配置BWP=BWPOFF//启动闪写保护位(保护禁用)启动闪写保护保护位(保护禁用)#pragma配置CP=OFF///代码保护(保护禁用)#pragma配置CP=OFF////代码保护(保护禁用)#pragma config config CP CP CP CP CP CP CP CP配置CP=OFF//OFF//代码保护(保护禁用)#包括< xc.h<&xc.h>;包括<&stdio.h>&包括<&stdlib.h<<&stdlib.h>>>\\#包括&sys/attribs/attribs/2BRG=259;//BAUD RATE 960040MHz U2MODEBITS?BRGH=0;/标准速度模式?16x波特时钟启用U2MODE位.PDSEL=0b00;//8位数据,无奇偶U2MODE位,无奇偶校验U2MODE位。STSEL=0;//8位数据,无奇偶校验U2MODE位。STSEL=0;0//1停止位TRISF比特TRISF比特.TRISF比特.TRISF4=1;TRISF比特.TRISF比特.TRISF比特.TRISF5=0;0;0;IEC1bits.U2Fbits.TRISFbits.TRISFbits.TRISFF5=0;0;IEC1bits.U2RX1.U2RX1;U2RX中断RX启用IPC8位.U2RXflag位被断言,而接收缓冲区不是空的(即,至少有一个数据字符)U2STAbits.URXEN=1;//UARTx接收器被启用。UxRX管脚由UARTx(如果ON=1)U2MODEbits.ON=1;//在IFS1位.U2RXIF=0;//清除标志INTCON比特.U2RXIF=0;//清除标志INTCONTCONTCON比特.MVEC=1;TRISB比特.TRISB比特.TRISB1=0;//LED同时(1){{{}}}}}void_u ISR(_UART_2_VECTOR,IPL5AUTO)uart(void){TB比特{LATB比特.LATB1=1;//LATB比特{LATBB比特.LATB比特.LATBB比特.LATB1;}
|
|
相关推荐
19个回答
|
|
|
尝试全局中断:ASM易失性(“EI”);
|
|
|
|
|
|
已经做了那个,没有工作。
|
|
|
|
|
|
对于较小的处理器(甚至说PIC24),用CPU寄存器直接控制UART并不太困难;但是,PIC32要复杂得多。现在(遗留的)外围图书馆使事情变得更容易得到一个UART工作…尤其是中断。看看PIC32 MX PLIB文档和如何使用PIC32 UART“玩得好”的例子。注意,在更新的MPLLABX版本中,PIC32MX PLIB显然需要作为单独的项目下载/安装。
|
|
|
|
|
|
不是真的。???尝试FPLLIDEV=DIVIG2
|
|
|
|
|
|
以FRCPLL为FNOSC,您的时钟频率实际上是80 MHz,而不是40。所以您的UART频率当前为19200。您用子优先级行清除了IP,它关闭了中断。因此,您可能指的是:IPC8bit.U2IS=0;然后在.(1):asm("ei")之前,必须使用该行启用内核的中断处理;最后,UART中断是一个持久中断,这意味着必须在mo中清除标志之前清除中断源。都尔要做到这一点,在清除标志之前,先读取U2RXRG寄存器。
|
|
|
|
|
|
我看不出来:启用多向量中断,使JTAGConfiguring等待状态中断,使PB时钟启用缓存。
|
|
|
|
|
|
谢谢大家的回复!拉里:我做了次要修正,但是你能解释一下导致你进入1920年的数学吗?不过,我已经改变了一些语法,应该是正确的。Max RubMn:多向量已经启用,我禁用JTAG。高速缓存和等待状态我理解得不够,所以需要一些时间。所有这些都让我看到这个代码://///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////agma配置FPLDIV_2//在PLL之前分割FRC(现在4MHz)#pragma配置FPLLMUL=MUL_20//PLL倍乘(现在80MHz)\#pragma配置FPLLPLL_2//PLL之前分割FRC(现在4MHz)=DIV_2//DIV_2//DIV_2//分割FRDIV_2//分PLL之后(现在40MHz)///DEVDEVCFG1 G1\\\#pragma配置FSCFCFCFCFCFCFCFCFCFCFCFCFG1\\\配置FSCPCPCPCP/外部的开关切换(启用)\pragma配置POSCMOD=XT///\\\\\\\\\\\\\2424244444444444444444程序配置POSC切换\\\\\\\\\\\\比特控制///DEVCFG0)///DEVCFG0#pragma配置DEBUG=OFF//背景调试器启用(调试器禁用)////背景调试器启用(调试器禁用)//////背景调试器启用(调试器禁用))\\\\pragma配置ICESESESESESESESESELICS_PGESEL=ICS_PGS_PGXXPGS_PGXXXXXXXXXXx2////////////ICE/ICE/ICE/ICE/ICE/ICE/ICE/ICE/ICE/ICE/ICD命令通道选择命令通道选择(ICot Flash Write Protect bit(Protection.bled)pragma config CP=OFF//Code Protect(Protection.bled)/pragma config语句应该在项目文件include.//Use project enums之前而不是define for ON and OFF.include
|
|
|
|
|
|
您对PLL输出除法器的更改现在是正确的。早期版本是DIVIG1,所以它是80兆赫。PBCLK也是80兆赫,所以19200就是从那里来的。现在,在ISR中,在清除U2RXIF位之前,您需要读取U2RXREG。否则位将不清楚。
|
|
|
|
|
|
再次感谢您的回复,我只是想打开LED知道是否中断工作。我需要阅读U2RXREG使LED打开?
|
|
|
|
|
|
不,如果你不希望中断运行一次后继续火,这是唯一需要的。
|
|
|
|
|
|
问题是LED没有打开,所以中断不起作用。一个问题:在视觉演播室里,我不选择握手。这样行吗?提前感谢所有的帮助
|
|
|
|
|
|
嗨,首先在ISR的声明部分中声明,1/检查和标记UART.2/Read U2RXREG.3/LATBbits.LATB1=1;4/IFS1bits.U2RXIF=0;//在读缓冲区之后,最后一个命令不要使用汇编命令中断asm volatile("ei");asm volatile("di");指令CPU连续随机重启。在某处有线程详细讨论了它。在编译器中使用两个命令。在不同版本的编译器中,语法是不同的,而且是在不同的模块中声明的。对于XC32之前的编译器,1.4是:(1.34)简单地使用write:DI;EI;RI;MVI;现在我不能对编译器1.4x说确切的语法,因为我不使用它。在IN之前,不要对中断使用任何命令MVEC=1;//多矢量,此外,这必须是在开始。这将切换CPU中的所有中断逻辑和表。所描述的各个函数必须以相同的顺序声明它们!否则,将不会中断。这是我在实验中发现的.//.e-OKfunc1 isr;func2 isr;func3 isr;...func1 isr{.}func2 isr{.}func3 isr{.}//.e-BADfunc1 isr;func3 isr;...func3 isr{.}func1 isr{.}func2 isr{.}
|
|
|
|
|
|
大家好,谢谢你们的回复。我考虑了你们所说的,改变了我的代码。我添加了发送部分和另一个中断胡斯托,看看它是否工作,至少它是这样的,所以UART应该是好的,但是接收器中断仍然不能工作!!!!!!!我真的不知道要改变什么!!!!!!!信息:我使用的是FT32转换器;////////////////////////////////////////////////////////////////-//y,PrasMac,FRCPLL//内部快速RC振荡器(8 MHz)W/PLL,Pracl配置,FPLLIdIV= DIVIO2//FLC,在PLL(现在为4 MHz)α-PracMA配置FPLLMUL= Mule20//PLL乘法之前。为了更多(现在80 MHz)后,PrLoLoDVI= DIVIO2/D/PLAL(现在40 MHz)//DVCFG1α-PrAPMA配置FSFOCEN=OF//次级振荡器使能(禁用)在OSCO PIN(禁用)上的信号OpCo Prima配置文件FPBDIV= DIVIO1/ /外围时钟除数(PBY-CK是SysSLCK/1)α-PrAPMA配置FFDTEN= OF//看门狗定时器启用(WDT禁用(SWDTEN位控制))//DVCFG0*PracMA配置调试=关闭/背景调试器启用(调试器禁用)ragma配置ICESEL=ICS_PGx2//ICE/ICD通信通道选择(与PGC2/PGD2共享的ICE EMUC2/EMUD2管脚)pragma配置PWP=OFF//程序闪存写入保护(禁用)pragma配置BWP=OFF//引导闪存写入保护位(保护禁用)pragma配置CP=OFF//代码保护(保护)n.bled)//pragma配置语句应该在项目文件include.//Use project enums之前,而不是define for ON和OFF。include
|
|
|
|
|
|
如果你有办法这样做,如示波器或逻辑分析仪,检查以确保信号本身正在到达PIC,如果你还没有。在信号到达收发信机之前先看一下信号,确定它正在进入,之后再确定它正在离开PIC的另一边的TTL电平。在尝试调试我的中断之前,我已经被烧伤了,结果RS232收发器坏了,或者焊接得不好,并且没有把数据传入。
|
|
|
|
|
|
你好,KTrenholm,谢谢你的答复,我认为这不是问题,因为我只是用这个电路到一个pic18 uart,它工作得很好。
|
|
|
|
|
|
目前是晚上0.25点。只是用这个处理器,我没有工作。明天我会详细地复习一下,并给出答案。对我来说,PIC32 MX150,整个程序是用5行写的。
|
|
|
|
|
|
嗨,StefiffI,谢谢你的帮助!
|
|
|
|
|
|
嗨,LMF,试试这个。我没有测试过,因为我没有位置。试着从计算机发送一个字节,然后检查LED。===使用下面的语法来设置启用中断的地方不是个好主意。LATBbits.LATB1=1;这是C中的一个命令,但是是汇编语言中的几个命令。如果有中断,当执行时,得到的结果可能是不可预知的。这种类型只用于检查某物。要设置必须使用函数集、CLR、In。
|
|
|
|
|
|
嗨,史蒂夫,明天我会试试你的代码。谢谢你的帮助。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
454 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3529 浏览 3 评论
1121浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1094浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
872浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
457浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 15:55 , Processed in 2.214576 second(s), Total 109, Slave 92 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1556