-
不用贴代码这么麻烦了。
需要的答案是: 注入模式究竟有几个DR寄存器!!!ADC1和ADC2各有四个,还是这两个ADC公用这四个。根据UM说明,注入模式的JDR寄存器高十六位是无效的,只有低十六位有效,必然是无法跟顺序模式的那样ADC1用低16位,ADC2用高16位。
我的程序已经改了注入模式,再改回顺序模式去抓个图看看。
并不是经常错位,而是偶然的,很少出现。但出现一次就是难以挽回的后果。
-
乱说了一个,8位单片机大端小端模式跟编译器有关
-
谢过,等待ing、、、
-
很有启发呵呵……
-
wince中调用mediaplayer.exe(CEplayer.exe)就可以了啊
-
上拉电阻就是限流+高电平
-
楼主这是。。。
-
厉害,,学习一下。。顺便up
-
请问怎么才可以确保某文件的代码在RO段的前4K范围呢????
-
综合利用串口中断和定时器
可以利用定时器,判断超时。如果超时,就把接收计数清零并将接收数组index清零,重新开始新一轮接收。
以下是部分代码(有点乱,慢慢看):vu8 tim4_overrun = (u8)0x00;
vu8 tim4_of_10ms = (u8)0x00;//tim4_overrun_flag 10ms
@far @interrupt void TIM4_IR(void)
{
TIM4->SR1 &= ~TIM4_SR1_UIF;
if (++tim4_overrun > (u8)10)
{
tim4_of_10ms |= (u8)0x01;
tim4_overrun &= (u8)0x00;
}
return;
}
@far @interrupt void USART_RX(void)
{
u8 dummy;
//如果没有通讯错误,且接收寄存器非空
if (!(UART1->SR & 0X0f))
{
TIM4->CNTR &= (u8)0x00;
tim4_overrun &=(u8)0x00;
if (tim4_of_10ms)
{
RxCounter &= (u8)0x00;
tim4_of_10ms &= (u8)0x00;
}
TxBuffer[RxCounter++] = UART1->DR;
if (RxCounter >= BufferSize)
{
while((UART1->SR & 0x20))//等待接收标志清空
{
dummy = UART1->DR;
}
RxCounter = 0;
}
}
else//如果有通讯错误
{
LEDS_PORT->ODR ^= 0x40;
RxCounter = 0;
dummy = UART1->SR;
dummy = UART1->DR;
}
return;
}
//void main(void)中
while (1) //等待中断
{
if (tim4_of_10ms)
{
RxCounter = 0;
tim4_of_10ms = 0;
}
}复制代码
-
这个码是我上网查的,应该没有什么问题,真是郁闷呀!真是着急!
-
楼主人走了?我用485时接收正常,但发回时会多发出一个字节,我发回时也换向了啊。怎么会多发出一个字节呢?
-
你写的程序本身就很有问题。
异步串口硬件问题里面一个比较容易出现的就是收发两端的频率误差。因为2051内置的振荡器不稳,如果使用专用的晶振做时钟源,比如1.8432,7.3842,11.0592等,就不会有这个问题。
然后再强调一下,你写的程序很有问题。^_^
-
猜测是细节的问题,再仔细查查。
-
你这个exe在PC下能运行吗?????
不是搞个PC上的过去吧!!
-
楼主都自己顶了,Ndis hook 我也没有弄过,也想看下出了什么问题的?
-
就是12M的你也不一定能够保证你能很准确的定时1S,小样
-
现在我的16550的现象是:
能打开串口不能发送数据
......
-
检查的过程有发现什么?
1、确认SWIM 的引脚是否有接错?更新最新的器件数据手册。
2、MCU只保留Vcap电容,VCC&GND之间的电容、Reset的10K下拉电阻,在使用STLink看看是否可以找到?
3、ST Link不用供电,MCU外接一个独立的供电电源,直接用5V直流电源就是。
4、用STVP使用STLink,试试能不能读出MCU的OptionBytes ?
-
我这里就有好几个,几年前设备自带的,9-15的