新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2022-1-3
- 在线时间
- 4 小时
|
6金钱
如题,我使用stm32F103与tb买的电能采集模块IM1253B进行串口通信,发现一直出毛病。无论怎么调试,都接受不到任何返回信息,尝试用串口调试助手监测串口发送,发现发出的全是0,但我用屏幕显示发送缓存区的数据是正常的。求教,附上发送部分的以及串口初始化的代码。
//与IM233b串口的通信 发送数据缓存区Tx_Buffer[8] 接受数据缓存区 RX_Buffer[40]
while(1)
{
if(KEY_Scan(0)==2) r
ead_enable =1; //按下KEY1进行检测
if(read_enable==1) //抄读指令传送 向模块传输指令
{
int i=0;
read();
while(i<8) //数据发送完毕跳出循环
{
if(USART1->SR &0x80) //若TXE为1,则向DR中传输数据,并进行发送
{
USART1->DR =Tx_Buffer;
OLED_ShowNum(0,0,Tx_Buffer,3,24);
OLED_Refresh();
i++;
LED2=~LED2;
while((USART1->SR&0x40)==0); //若TC不等于1则继续等待
}
delay_ms(50);
}
read_enable=0; //抄读指令传送完毕,置0
}
//初始化IO 串口1
//pclk2 CLK2时钟频率(Mhz)
//bound:波特率
//CHECK OK
//091209
void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
RCC->APB2ENR|=1<<14; //使能串口时钟
GPIOA->CRH&=0XFFFFF00F;//IO状态设置
GPIOA->CRH|=0X000008B0;//IO状态设置
RCC->APB2RSTR|=1<<14; //复位串口1
RCC->APB2RSTR&=~(1<<14);//停止复位
//波特率设置
USART1->BRR=mantissa; // 波特率设置
USART1->CR1|=0X200C; //1位停止,无校验位.
#if EN_USART1_RX //如果使能了接收
//使能接收中断
// USART1->CR1|=1<<8; //PE中断使能
USART1->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(1,1,USART1_IRQn,1);//组1,最高优先级
#endif
}

|
|