仅供自己记录!欢迎交流
这一篇主要是要会用串口的几个函数,以及配置好Sysconfig的初始化函数。
我是根据嘉立创目前出的1306教程来移植的,几乎没有什么变化,除了LED和串口一的引脚的变化,值得一提的是3507板载4个串口,资源确实丰富。不理解代码的有需要的直接跳转原文:Docs
上代码:
#include "ti_msp_dl_config.h"
volatile unsigned int delay_times = 0;
volatile unsigned char uart_data = 0;
void delay_ms(unsigned int ms);
void uart0_send_char(char ch);
void uart0_send_string(char* str);
int main(void)
{
SYSCFG_DL_init();
//清除串口中断标志
NVIC_ClearPendingIRQ(UART_0_INST_INT_IRQN);
//使能串口中断
NVIC_EnableIRQ(UART_0_INST_INT_IRQN);
while (1)
{
//LED引脚输出高电平
DL_GPIO_setPins(PORTA_PORT, PORTA_LED_PIN);
delay_ms(500);
//LED引脚输出低电平
DL_GPIO_clearPins(PORTA_PORT, PORTA_LED_PIN);
delay_ms(500);
}
}
//搭配滴答定时器实现的精确ms延时
void delay_ms(unsigned int ms)
{
delay_times = ms;
while( delay_times != 0 );
}
//串口发送单个字符
void uart0_send_char(char ch)
{
//当串口0忙的时候等待,不忙的时候再发送传进来的字符
while( DL_UART_isBusy(UART_0_INST) == true );
//发送单个字符
DL_UART_Main_transmitData(UART_0_INST, ch);
}
//串口发送字符串
void uart0_send_string(char* str)
{
//当前字符串地址不在结尾 并且 字符串首地址不为空
while(*str!=0&&str!=0)
{
//发送字符串首地址中的字符,并且在发送完成之后首地址自增
uart0_send_char(*str++);
}
}
//滴答定时器的中断服务函数
void SysTick_Handler(void)
{
if( delay_times != 0 )
{
delay_times--;
}
}
//串口的中断服务函数
void UART_0_INST_IRQHandler(void)
{
//如果产生了串口中断
switch( DL_UART_getPendingInterrupt(UART_0_INST) )
{
case DL_UART_IIDX_RX://如果是接收中断
//接发送过来的数据保存在变量中
uart_data = DL_UART_Main_receiveData(UART_0_INST);
//将保存的数据再发送出去
uart0_send_char(uart_data);
break;
default://其他的串口中断
break;
}
}
最终效果:
蓝牙原理相同,使用的是板载的串口3,目前调试成功。