申请永久网站空间,网站安装不了wordpress,做网站域名怎么选有利于seo,注册网站域名要多少钱目录代码实现使相应工程支持打印浮点数实验结果平台#xff1a;Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP)代码实现
重定向fputc(int ch, FILE *f)直接使用printf的方法只有字符串和%s打印正常#xff0c;数字打印不出来…
目录代码实现使相应工程支持打印浮点数实验结果平台Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP)代码实现
重定向fputc(int ch, FILE *f)直接使用printf的方法只有字符串和%s打印正常数字打印不出来 只好换成这个。 这个程序是我以前写在STM32里的现在移植过来效果依然不错。
#include string.h
#include stdarg.h
#include stdio.h
void UART_printf(uint16_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)USCI_A_UART_transmitData(baseAddress, TxBuffer[i]);
}整个源文件如下
#include driverlib.h#define MCLK_IN_HZ 25000000#define delay_us(x) __delay_cycles((MCLK_IN_HZ/1000000*(x)))
#define delay_ms(x) __delay_cycles((MCLK_IN_HZ/1000*(x)))#include string.h
#include stdarg.h
#include stdio.h
void UART_printf(uint16_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)USCI_A_UART_transmitData(baseAddress, TxBuffer[i]);
}void SystemClock_Init(void)
{PMM_setVCore(PMM_CORE_LEVEL_3); //高主频工作需要较高的核心电压//XT1引脚复用GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN4);GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P5, GPIO_PIN5);//起振XT1UCS_turnOnLFXT1(UCS_XT1_DRIVE_3,UCS_XCAP_3);//XT2引脚复用GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN2);GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P5, GPIO_PIN3);//起振XT2UCS_turnOnXT2(UCS_XT2_DRIVE_4MHZ_8MHZ);//XT2作为FLL参考时钟先8分频再50倍频 4MHz / 8 * 50 25MHzUCS_initClockSignal(UCS_FLLREF, UCS_XT2CLK_SELECT, UCS_CLOCK_DIVIDER_8);UCS_initFLLSettle(25000, 50);//XT1作为ACLK时钟源 32768HzUCS_initClockSignal(UCS_ACLK, UCS_XT1CLK_SELECT, UCS_CLOCK_DIVIDER_1);//DCOCLK作为MCLK时钟源 25MHzUCS_initClockSignal(UCS_MCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);//DCOCLK作为SMCLK时钟源 25MHzUCS_initClockSignal(UCS_SMCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);//设置外部时钟源的频率使得在调用UCS_getMCLK, UCS_getSMCLK 或 UCS_getACLK时可得到正确值UCS_setExternalClockSource(32768, 4000000);
}bool UART_Init(uint16_t baseAddress, uint32_t Baudrate)
{float UART_Temp 0;USCI_A_UART_initParam huart {0};if(baseAddress USCI_A0_BASE) //P3.3, P3.4 USCI_A0 TXD/RXD{GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P3, GPIO_PIN3);GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P3, GPIO_PIN4);}else if(baseAddress USCI_A1_BASE) //P4.4, P4.5 USCI_A1 TXD/RXD{GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P4, GPIO_PIN4);GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P4, GPIO_PIN5);}if(Baudrate 9600){huart.selectClockSource USCI_A_UART_CLOCKSOURCE_ACLK;UART_Temp (float)UCS_getACLK()/Baudrate;}else{huart.selectClockSource USCI_A_UART_CLOCKSOURCE_SMCLK;UART_Temp (float)UCS_getSMCLK()/Baudrate;}if(UART_Temp 16)huart.overSampling USCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION;else{huart.overSampling USCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;UART_Temp / 16;}huart.clockPrescalar (int)UART_Temp;if(huart.overSampling USCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION){huart.secondModReg (int)((UART_Temp - huart.clockPrescalar) * 8);}else{huart.firstModReg (int)((UART_Temp - huart.clockPrescalar) * 16);}huart.parity USCI_A_UART_NO_PARITY;huart.msborLsbFirst USCI_A_UART_LSB_FIRST;huart.numberofStopBits USCI_A_UART_ONE_STOP_BIT;huart.uartMode USCI_A_UART_MODE;if (STATUS_FAIL USCI_A_UART_init(baseAddress, huart)){return STATUS_FAIL;}//Enable UART module for operationUSCI_A_UART_enable(baseAddress);//Enable Receive InterruptUSCI_A_UART_clearInterrupt(baseAddress, USCI_A_UART_RECEIVE_INTERRUPT);USCI_A_UART_enableInterrupt(baseAddress, USCI_A_UART_RECEIVE_INTERRUPT);return STATUS_SUCCESS;
}int main(void)
{WDT_A_hold(WDT_A_BASE);SystemClock_Init();UART_Init(USCI_A1_BASE, 115200);//interrupts enabled__bis_SR_register(GIE);while(1){UART_printf(USCI_A1_BASE, 数字测试%d字符串测试%s\r\n, 2333, 能收到就算成功);delay_ms(1000);}
}//******************************************************************************
//
//This is the USCI_A0 interrupt vector service routine.
//
//******************************************************************************
#pragma vectorUSCI_A0_VECTOR
__interrupt void USCI_A0_ISR (void)
{uint8_t receivedData 0;switch (__even_in_range(UCA0IV,4)){//Vector 2 - RXIFGcase 2:receivedData USCI_A_UART_receiveData(USCI_A0_BASE);USCI_A_UART_transmitData(USCI_A0_BASE,receivedData);break;default:break;}
}//******************************************************************************
//
//This is the USCI_A1 interrupt vector service routine.
//
//******************************************************************************
#pragma vectorUSCI_A1_VECTOR
__interrupt void USCI_A1_ISR (void)
{uint8_t receivedData 0;switch (__even_in_range(UCA1IV,4)){//Vector 2 - RXIFGcase 2:receivedData USCI_A_UART_receiveData(USCI_A1_BASE);USCI_A_UART_transmitData(USCI_A1_BASE,receivedData);break;default:break;}
}
使相应工程支持打印浮点数
若需要打印浮点数则需设置对应工程 将此处设为full即可
实验结果