Part Number:TM4C123GH6PZ
void UART_printf(uint32_t baseAddress, const char *format,...) { uint32_t length; va_list args; uint32_t i; char TxBuffer[128] = {0}; va_start(args, format); length = vsnprintf((char*)TxBuffer, sizeof(TxBuffer), (char*)format, args); va_end(args); for(i = 0; i < length; i++) {while(UARTBusy(baseAddress));UARTCharPut(baseAddress,TxBuffer[i]); } }
Ben Qin:
你好,你使用的是哪个例程?可以用CCS试一下吗?
,
风正豪:
我是自己编写的模板程序。因为使用CCS不习惯,所以使用keil
,
风正豪:
我使用如上代码,就会进入FaultIsR中断。
,
Ben Qin:
请将错误截图发上来看一下。
,
风正豪:
我这个程序就是,如果串口接收到了字符a,然后就将定时器中断间隔时间以浮点数据形式发送给电脑。如果是发送浮点数据的话,经过几次之后就会卡死在FaultIsR中断里面。但是如果我对定时器中断间隔时间处理成整型数据,以整型数据形式发送给电脑,就没有任何问题。
,
Ben Qin:
风正豪 说:经过几次之后就会卡死在FaultIsR中断里面
你的意思是一开始可以接受到数据?
,
风正豪:
对的,一开始可以接收几十次。有时候是30多次就卡死了进入中断。有时候70多次,也有130多次才卡死的。不过都在半分钟之内就卡死了
,
Ben Qin:
你使能了FPU吗?使用浮点数的话需要使能FPU,不然就会卡死。
,
风正豪:
之前就打开了,但是还是卡
,
Ben Qin:
好的,我将咨询下相关资深工程师,一旦有回复会立即回复您。
,
风正豪:
好的
,
Ben Qin:
你好,一般来说需要将float转换成string然后通过uart将string发送出去。
,
Ben Qin:
uart是不支持%f 浮点数打印的,请看下图。需要将浮点值转换成字符串,然后再将字符串发送给UARTprintg()打印。