- 2025-01-27
-
回复了主题帖:
STM32F103单使用串口收发时,收不到数据,SR寄存器的LBD,FE置位,NE没有置位
问题解决了,想起帖子的时间太久了,串口收的一个标志放在循环体的外面导致的
-
回复了主题帖:
STC98LE52模拟 I2C通信 这个波形为什么会出现中间的电平,怎么消除?
问题解决了,这个板子驱动5个设备,而且都是相同的I2C地址,这样应答时就会冲突
- 2024-04-29
-
发表了主题帖:
STC98LE52模拟 I2C通信 这个波形为什么会出现中间的电平,怎么消除?
STC98LE52模拟 I2C通信 带1个负载,上拉电阻是R202,这个波形为什么会出现中间的电平,怎么消除啊?求帮助
图后附模拟I2C程序
//状态标志
bit ack; //应答标志位
void Delay50us() //@12.000MHz
{
unsigned char i;
_nop_();
i = 22;
while (--i);
}
// 起动总线函数
//函数原型: void Start_I2c();
//功能: 启动I2C总线,即发送I2C起始条件.
void start_i2c()
{
sda=1; //发送起始条件的数据信号
sck=1;
Delay50us();
sda=0; //发送起始信号
Delay50us();
sck=0; //钳住I2C总线,准备发送或接收数据
Delay50us();
}
// 结束总线函数
//函数原型: void Stop_I2c();
//功能: 结束I2C总线,即发送I2C结束条件.
void stop_i2c()
{
sda=0; //发送结束条件的数据信号
sck=1; //结束条件建立时间大于4μs
Delay50us();
sda=1; //发送I2C总线结束信号
Delay50us();
}
// 字节数据传送函数
//函数原型: void SendByte(unsigned char c);
//功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
// 此状态位进行操作.(不应答或非应答都使ack=0 假)
// 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
void sendbyte(unsigned char c)
{
unsigned char BitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++) //要传送的数据长度为8位
{
if((c<<BitCnt)&0x80)sda=1; //判断发送位
else sda=0;
sck=1; //置时钟线为高,通知被控器开始接收数据位
Delay50us();
sck=0;
}
Delay50us();
sda=1; //8位发送完后释放数据线,准备接收应答位
Delay50us();
sck=1;
Delay50us();
if(sda==1)ack=0;
else ack=1; //判断是否接收到应答信号
sck=0;
Delay50us();
}
- 2024-04-09
-
回复了主题帖:
STM32F103单使用串口收发时,收不到数据,SR寄存器的LBD,FE置位,NE没有置位
秦天qintian0303 发表于 2024-4-9 11:21
波特率111111,你的串口助手可以设置这个值吗?
可以设置,使用SSCOM,可以自定义设置波特率,我也用波特率9600试过,也是上面这种情况
-
回复了主题帖:
STM32F103单使用串口收发时,收不到数据,SR寄存器的LBD,FE置位,NE没有置位
没事用LIN为什么会检测到断开呢,还FE置位NE没有置位那表示没有发生帧错误而是接受到断开符,我用CH341的TX和RX短接,串口助手收发都正常,没问题,难道是我硬件有问题?
-
发表了主题帖:
STM32F103单使用串口收发时,收不到数据,SR寄存器的LBD,FE置位,NE没有置位
本帖最后由 CC2503 于 2024-4-9 10:36 编辑
求助:STM32F103单使用串口收发时,收不到数据,SR寄存器的LBD:LIN断开标志,RXNE读数据寄存器非空,IDLE监测到总线空闲,FE帧错误以上均被硬件置位,NE没有置位,接收到的数据一直为0,找不到原因了。
使用的USART1 RX PA0浮空输入,TX PA9复用推挽输出 速度10M,系统时钟16M 波特率111111,串口收发使用的CH341 12M,整个系统只是使用了串口收发一个功能。
以下为DEBUG:
初始化后USART1各寄存器状态
收到收据后SR寄存器状态
发送数据后SR寄存器状态
USART1部分代码如下:
void USART1_Conf(void)
{
USART1->CR1 &= ~USART_CR1_M;//一个起始位,8个数据位,n个停止位
USART1->CR2 &= ~USART_CR2_STOP;//设置1个停止位
USART1->BRR &= ~USART_BRR_DIV_Mantissa;//整数部分清0
USART1->BRR |= (9<<4);//设置整数部分 9 整数加小数部分为9.0000
USART1->BRR &= ~USART_BRR_DIV_Fraction;//小数部分清0
USART1->CR1 |= USART_CR1_UE;//USART1使能
USART1->CR1 |= USART_CR1_RE;//使能接收
USART1->CR1 &= ~USART_CR1_RWU;//接收器处于正常工作模式
}
int main(void)
{
unsigned long u;
RCC_Conf();
GPIO_Conf();
USART1_Conf();
while(1)
{
while(!(USART1->SR & USART_SR_RXNE));//等待收到数据可以读出
u=USART1->DR;
USART1->CR1 |= USART_CR1_TE;//使能发送
while(!(USART1->SR & USART_SR_TC));//等待发送完成
while(!(USART1->SR & USART_SR_TXE));//等待发送数据寄存器空
USART1->DR =u;//数据写进DR发送寄存器中
while(!(USART1->SR & USART_SR_TC));//等待发送完成
while(!(USART1->SR & USART_SR_TXE));//等待发送数据寄存器空
USART1->CR1 &= ~USART_CR1_TE;//关闭发送
}
}
- 2024-04-01
-
回复了主题帖:
新编电子电路大全 共3卷
感谢分享,对基础学习很有帮助,多看一看受益颇深
-
回复了主题帖:
《晶体管电路设计》日本 池原典利著 中文版
感谢分享,参考借鉴以下,对基础学习很有帮助,大好人