本节咱们来运用LPC1343的UART接口做一个简略的收发试验。
咱们之前应该都有运用51或AVR一类单片机做过异步串行收发试验,当然串口在电子开发中的运用位置就无需多言。咱们直接进入主题。
本次试验这样规划,用PC作为上位机向UART发送一个(串)字节,然后LPC1343收到这个(串)字节后再发回UART,在PC上的串口调查软件显现出来。
咱们来看NXP带给咱们的UART例程来看看UART的设置以及作业进程。首要是主函数:
int main (void)
{
while (1)
LPC_UART->IER = IER_THRE | IER_RLS | IER_RBR;
}
从主函数就能够看到本次例程的意图了:初始化UART——一旦接纳到数据之后当即中止接纳——发送——敞开下一次接纳。最重要的当然是初始化函数UARTInit():
void UARTInit(uint32_t baudrate)
{
LPC_IOCON->PIO1_6 &= ~0x07;
Fdiv=(((SystemCoreClock*LPC_SYSCON->SYSAHBCLKDIV)/regVal)/16)
//baudrate ;
#if TX_INTERRUPT
#else
#endif
}
打星号的当地是笔者认为比较值得重视的当地:
1、UART的IO口设置,依据上述函数中的句子查找相关寄存器,能够发现它将P16、P17设置为:UART_RXD和UART_TXD功用;
2、挑选UART时钟分频数,此处1分频,和波特率设置有直接关系;
3、挑选数据格式,此处挑选数据长度8位,无校验,1位中止位,并敞开除数锁存;
4、除数锁存器:分为LSB(8位)和MSB(8位),用来填入对应某波特率的计数值,更改之前免除确定,更改结束康复确定,这样就能够确定波特率了(能够这样简略的了解);
5、核算波特率,此处是重点了。首要咱们必定知道体系中心频率为72MHz,即SystemCoreClock=72 000 000(参阅本系列前几章内容)。而UART作为AHB总线上的设备,天然要经过AHB分频器,在此处,AHB分频系数并未做过特别设置,所认为默认值1。时钟经过AHB分频之后要经过UART分频器进行再分频,分频系数仍为1(第2点)。因而咱们来核算这个公式:
Fdiv = (((SystemCoreClock*LPC_SYSCON->SYSAHBCLKDIV)/regVal)/16)/baudrate
其间SystemCoreClock=72000000,LPC_SYSCON->SYSAHBCLKDI=1,regVal=1,baudrate=115200,所以能够核算出:
Fdiv=39.0625≈0x27
这个就是发生115200波特率所要填入除数锁存器的值。逆过来就能够核算出计数值对应的波特率。
6、线状况寄存器(下文稍加叙述)是以读操作来清空的;
其实这个函数,关于用户来说,只需求填入想要发生的波特率作为函数参数就能够结束LPC1343的UART初始化以及波特率设定作业。
设定结束之后,UART就开端作业了,由于初始化函数里边敞开了“启用缓存数据可用中止、线状况中止”所以当有数据从上位机向UART发送数据时,进入中止服务函数:
void UART_IRQHandler(void)
{
IIRValue = LPC_UART->IIR;
LPC1343串口学习
本节我们来使用LPC1343的UART接口做一个简单的收发实验。大家之前应该都有使用51或AVR一类单片机做过异步串行收发实验,当然串口在电子开发