关于串口的重要性,在调试中,如果使用得好,串口的效果甚至比调试器更方便.
搞懂串口才能和电脑进行交互通信.
另外串口是单片机和单片机直接通信的一个常用设备.
所以串口在单片机开发的重要性是毋庸置疑的!
这章我们增加UART0进行通信
我们看看main.c如何处理:
#include "main.h"
// 主函数
int main(void)
{
sysTimerInit(); // 定时器初始化
LED_Config(); // LED初始化
sysUart0_Init(); // 串口初始化
while(1) // 无限循环
{
if(_500MsFlag==1)
{
_500MsFlag = 0;
led_func();
uart0_send(0xc5); // 可以使用示波器看到P22上到波形
}
}
}
sys_uart.c
#include "CMS32F030x.h"
#define UART0_BAUDRATE 115200 //波特率
#define TX0_PINCFG IOP22CFG
#define RX0_PINCFG IOP23CFG
void sysUart0_Init(void)
{
SYSCON->APBCKEN |= (1 << 4); //使能UART0的时钟
SYSCON->TX0_PINCFG = 0x02; //配置TX0的引脚
SYSCON->RX0_PINCFG = 0x02; //配置RX0的引脚
UART0->FCR = (0x0 << 6) | (1 << 1) | (1 << 0);
UART0->LCR = (0x3 << 0);
UART0->DLR = 48000000 / 16 / UART0_BAUDRATE; //计算并设置波特率
UART0->IER = (1 << 0); //使能串口0的中断
NVIC_EnableIRQ(UART0_IRQn); //使能串口0的中断矢量号
NVIC_SetPriority(UART0_IRQn, 1); //设置串口0的中断优先级
}
unsigned char rxbuf[16]; //接收buf
unsigned char rx_index; //接收索引
void UART0_IRQHandler(void)
{
uint32_t iirTmp = UART0->IIR;
if((iirTmp & 0x01) == 0)
if ((iirTmp & 0x0E) == (0x02 << 1))
if (UART0->LSR & 0x01)
{
rxbuf[rx_index]=UART0->RBR; //读出串口FIFO中的数据
rx_index = (rx_index+1)&0x0f; //索引号加1,大于15则等于0;
}
}
void uart0_send(unsigned char txdata)
{
UART0->THR = txdata; //往串口0的FIFO里写数据
}
现在我们就可以通过串口和电脑进行通信了,当然现在大多电脑已经没有实际串口,需要使用USB串口板进行转换才能真正和电脑进行通信