資源簡介
STM8S模擬串口,雙串口,虛擬串口

代碼片段和文件信息
/*?Includes?------------------------------------------------------------------*/
#include?“stm8s.h“
#include?“stm8s_it.h“
//#include?“iostm8s103k3.h“
#include?“main.h“
///////////////////////////////////////////////////
#define TIM1_timer?1667??//接收定時器
#define TIM2_timer?1667?//發送定時器
u8?vm_UART_RX_P;//接收緩存指針
#define?vm_UART_RX_BUF_L?32//接收緩存長度
u8?vm_UART_RX_BUF[vm_UART_RX_BUF_L];//接收緩存
u8?vm_UART_RX_byte;//擴展串口?字節緩沖區
u8?vm_UART_RX_bit;//擴展串口?計算位數
u8?vm_UART_TX_byte;//擴展串口?字節緩沖區
u8?vm_UART_TX_bit;//擴展串口?計算位數
u8?vm_uart_tx_flag;//正在發送標志
u8?vm_uart_rx_flag;//正在接收標志
#define TIM2_START?????????TIM2->CNTRL?=?0;TIM2->CNTRH?=?0;TIM2->CR1?|=?TIM2_CR1_CEN;??//計數器置零,啟動定時器
#define TIM2_STOP?????????????(TIM2->CR1?&=??(~TIM2_CR1_CEN))?//停止定時器
#define TIM1_START?????????TIM1->CNTRL?=?0;TIM1->CNTRH?=?0;TIM1->CR1?|=?TIM1_CR1_CEN;??//計數器置零,啟動定時器
#define TIM1_STOP?????????????(TIM1->CR1?&=??(~TIM1_CR1_CEN))?//停止定時器
#define VM_UART_TXD_PORT_WriteHigh?????GPIOD->ODR?|=?GPIO_PIN_4
#define VM_UART_TXD_PORT_WriteLow?????GPIOD->ODR?&=?(~GPIO_PIN_4)
#define VM_UART_TXD_PORT_OUT???????GPIOD->DDR?|=???GPIO_PIN_4;GPIOD->CR1?|=??(GPIO_PIN_4);GPIOD->CR2?&=??(~GPIO_PIN_4)?//設定為輸出
#define VM_UART_TXD_PORT_IN???????GPIOD->DDR?&=?~(GPIO_PIN_4);GPIOD->CR1?|=??(GPIO_PIN_4);GPIOD->CR2?&=??(~GPIO_PIN_4)??//設定為輸出
#define VM_UART_RXD_PORT_IN????????GPIOD->DDR?&=?~(GPIO_PIN_3);GPIOD->CR1?|=??(GPIO_PIN_3);GPIOD->CR2?&=??(~GPIO_PIN_3)?//只上拉輸入?不中斷
//設置為輸入
#define VM_UART_RXD_PORT_INT_IN????GPIOD->DDR?&=?~(GPIO_PIN_3);GPIOD->CR1?|=??(GPIO_PIN_3);GPIOD->CR2?|=??(GPIO_PIN_3)?//只上拉輸入?不中斷
//設置為可中斷輸入
////////////////////////////////////////////////////////////////////////////////////////////////
INTERRUPT_HANDLER_TRAP(TRAP_IRQHandler)
{
}
INTERRUPT_HANDLER(TLI_IRQHandler?0)
{
}
INTERRUPT_HANDLER(AWU_IRQHandler?1)
{
}
INTERRUPT_HANDLER(CLK_IRQHandler?2)
{
}
INTERRUPT_HANDLER(EXTI_PORTA_IRQHandler?3)
{
}
INTERRUPT_HANDLER(EXTI_PORTB_IRQHandler?4)
{
}
INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler?5)
{
}
INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler?6)
{
????//外中斷一次收一個字節,只識別起始位
????if((GPIOD->IDR?&?(uint8_t)GPIO_PIN_3)?==?0)
????{
????????TIM1_START;//啟動定時器
????????vm_UART_RX_byte?=?0;
????????vm_UART_RX_bit?=?0;
????????VM_UART_RXD_PORT_IN;?//只上拉輸入?不中斷
????????vm_uart_rx_flag?=?1;
????}
}
INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler?7)
{}
#ifdef?STM8S903
INTERRUPT_HANDLER(EXTI_PORTF_IRQHandler?8)
{}
#endif?/*STM8S903*/
#ifdef?STM8S208
INTERRUPT_HANDLER(CAN_RX_IRQHandler?8)
{}
INTERRUPT_HANDLER(CAN_TX_IRQHandler?9)
{}
#endif?/*STM8S208?||?STM8AF52Ax?*/
INTERRUPT_HANDLER(SPI_IRQHandler?10)
{}
INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler?11)//接收
{
????TIM1->SR1?=?(uint8_t)(~TIM1_IT_UPDATE);
????if((GPIOD->IDR?&?GPIO_PIN_3)?==?0)
????{
????????vm_UART_RX_byte?/=?2;
????}
????else
????{
????????vm_UART_RX_byte?/=?2;
????????vm_UART_RX_byte?|=?0X80;
????}
????vm_UART_RX_bit++;
????if(vm_UART
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????9949??2014-09-14?19:52??main.c
-----------?---------??----------?-----??----
?????????????????9949????????????????????1
評論
共有 條評論