- #include"stm8s.h"
- #include"stm8s_conf.h"
- #include"UART2.h"
- #include"stdarg.h"
-
- void UART2_Config(u32 Rate)
- {
- CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, ENABLE);
- GPIO_Init(UART2_PORT, TX2_PIN, GPIO_MODE_OUT_PP_LOW_FAST);
- GPIO_Init(UART2_PORT, RX2_PIN, GPIO_MODE_IN_PU_NO_IT);
- UART2_Init(Rate, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO, UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE);
- UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE);
- UART2_Cmd(ENABLE);
- }
-
- void UART2_SendByte(u8 Byte)
- {
- while(!(UART2->SR & TC));
- UART2->DR = Byte;
- }
-
- #pragma vector =ITC_IRQ_UART2_RX + 2
- __interrupt void UART2_IRQHandler(void)
- {
- u8 Temp;
- if(UART2->SR & UART2_SR_RXNE)
- {
- Temp =UART2->DR;
- UART2->SR = ~UART2_SR_RXNE;
- UART2_SendByte(Temp);
- }
- }
-
- char * UART2_itoa(int value, char *string, int radix)
- {
- int i, d;
- int flag = 0;
- char *ptr = string;
- /* This implementation only works for decimal numbers. */
- if (radix != 10)
- {
- *ptr = 0;
- return string;
- }
-
- if (!value)
- {
- *ptr++ = 0x30;
- *ptr = 0;
- return string;
- }
-
- /* if this is a negative value insert the minus sign. */
- if (value < 0)
- {
- *ptr++ = '-';
-
- /* Make the value positive. */
- value *= -1;
- }
-
- for (i = 10000; i > 0; i /= 10)
- {
- d = value / i;
-
- if (d || flag)
- {
- *ptr++ = (char)(d + 0x30);
- value -= (d * i);
- flag = 1;
- }
- }
-
- /* Null terminate the string. */
- *ptr = 0;
- return string;
- }
- void UART2_Printf(u8 *Data,...)
- {
- const char *s;
- int d;
- char buf[16];
- va_list ap;
- va_start(ap, Data);
-
- while(*Data!=0){ //判断是否到达字符串结束符
- if(*Data==0x5c){ //'\'
- switch (*++Data){
- case 'r': //回车符
- UART2_SendByte(0x0d);
-
- Data++;
- break;
- case 'n': //换行符
- UART2_SendByte(0x0a);
- Data++;
- break;
-
- default:
- Data++;
- break;
- }
-
-
- }
- else if(*Data=='%'){ //
- switch (*++Data){
- case 's': //字符串
- s = va_arg(ap, const char *);
- for ( ; *s; s++) {
- UART2_SendByte(*s);
- }
- Data++;
- break;
- case 'd': //十进制
- d = va_arg(ap, int);
- UART2_itoa(d, buf, 10);
- for (s = buf; *s; s++) {
- UART2_SendByte(*s);
- }
- Data++;
- break;
- default:
- Data++;
- break;
- }
- }
- else UART2_SendByte(*Data++);
- }
- }
|