电力载波芯片ST7538Q调试记录2

1. 测试用串口收发数据

先使用SPI模式配置寄存器(因为配置寄存器只能使用SPI模式,CPU做从机),配置后关闭外部中断1(模拟SPI时钟),开启串口中断(串口2),配置串口波特率600bps,发送数据0x00~0xFF,做CRC16校验

校验正确率84%

2. 配置寄存器需要注意的问题

2.1 配置主接口模式(Mains Interfacing Mode)

配置寄存器(主接口模式位)不能配置成异步模式,否则写入寄存器后SPI时钟停止,程序后续要读出寄存器值并进行比较就会停在中断里。当前配置是0x932230(关闭发送超时和看门狗;频率检测时间设置为1ms;波特率2400bps)。但是上电后默认主接口模式位是异步,但是也有SPI时钟,需要再看一下。

2.2 配置频率检测时间(Frequency Detection Time)

配置频率检测时间要配合SPI时钟和波特率。波特率600bps时,一个时钟周期为1.67ms,配置检测时间为3ms,配合前导字节具有较高的成功率;检测时间不变的情况下增加波特率到2400bps,一个时钟周期为416.67us,这样在检测时会因为频率检测时间长漏掉传输字节,所以配置成1ms。

3. 配置串口需要注意的问题

3.1 配置串口波特率需要在LpcDrivers\source\lpc17xx_uart.clpc17xx_uart.c文件下找到Status uart_set_divisors(LPC_UART_TypeDef *UARTx)函数,修改相应串口的波特率才能起效。

3.2 配置串口的顺序

配置串口先使用开启全局中断,软件模拟SPI模式配置寄存器,然后关闭全局中断配置串口2,之后打开全局中断。建议在配置了串口之后用NVIC_DisableIRQ(EINT1_IRQn)函数关闭外部中断(SPI模拟时钟)降低串口中断被打断的几率(因为外部中断优先级比串口中断高)

3.3 串口发送和接收

串口发送使用自带的发送函数Uart2Send(uint8*dat, uint16 len),发送时多发送一个0x00字节,但不要混合在g_TxBuffer中,发送之前判断g_Uart2SendEndFlag标志:

0=初始化状态;

1=正在发送;

2=已经发送完成;

在初始化状态和已经发送完成状态可以进入调用发送函数,如果发送之后是正在发送状态则延时等待发送完成。

串口的接收过程基本相同,需要注意的是在波特率600bps的情况下,若发送256个字节,需要至少256*8/600≈3.413秒,延时等待用JudgeSomeSecondDelayInPro(uint32 Timerval, uint32 DelayN),每个值延时100ms,接收时先接收一个字节跳过多发的0x00,然后接收重新开始接收数据,包括校验字节计算下来至少需要4s左右,实际情况应该适当延长接收时间,保证数据有足够时间接收。

可根据如下公式计算:

T(接收延时时间)=B(发送字节数)*8*1.5/b(波特率)

在波特率600bps的情况下,发送256个字节,T=256*8*1.5/600=5.12s

在波特率2400bps的情况下,发送256个字节,T=256*8*1.5/2400=1.28s

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值