//少說話,多做事,以下是我驗證過沒有問題的串口發送接受數據
//初始化時調用:
GPIO_DeInit(GPIOD);
/* Configure PD5/6 */
GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_IN_PU_NO_IT);//發送數據IO
GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT);//接受數據IO
UART2_DeInit();
UART2_Init(2400,UART2_WORDLENGTH_8D,UART2_STOPBITS_1,UART2_PARITY_NO,\
UART2_SYNCMODE_CLOCK_DISABLE,\
UART2_MODE_TX_ENABLE|UART2_MODE_RX_ENABLE); //波特率 2400 8位數據
//1個停止位 沒有奇偶校驗 關閉SCK 允許串口接受和發送
UART2_Cmd(ENABLE);//啟用串口
UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE);//允許接受中斷
//操作串口(發送接受數據)時調用:
if(UART2_GetFlagStatus(UART2_FLAG_TC))
{//當前沒有在發數據,可以發數據
UART2_SendData8(Uart2TexData);
UART2_ClearFlag(UART2_FLAG_TC);
}
UART2_ClearITPendingBit(UART2_FLAG_RXNE);//清中斷標志位
Uart2RecData = UART2_ReceiveData8();//接受中斷數據//后面兩句需要發在
串口接受中斷中
void UART2_DeInit(void)
{
u8 dummy = 0;
/*< Clear the Idle Line Detected bit in the status rerister by a read
to the UART2_SR register followed by a Read to the UART2_DR
register */
dummy = UART2->SR;
dummy = UART2->DR;
UART2->BRR2 = UART2_BRR2_RESET_VALUE; /*< Set UART2_BRR2 to reset
value 0x00 */
UART2->BRR1 = UART2_BRR1_RESET_VALUE; /*< Set UART2_BRR1 to reset
value 0x00 */
UART2->CR1 = UART2_CR1_RESET_VALUE; /*< Set UART2_CR1 to reset value
0x00 */
UART2->CR2 = UART2_CR2_RESET_VALUE; /*< Set UART2_CR2 to reset value
0x00 */
UART2->CR3 = UART2_CR3_RESET_VALUE; /*< Set UART2_CR3 to reset value
0x00 */
UART2->CR4 = UART2_CR4_RESET_VALUE; /*< Set UART2_CR4 to reset value
0x00 */
UART2->CR5 = UART2_CR5_RESET_VALUE; /*< Set UART2_CR5 to reset value
0x00 */
UART2->CR6 = UART2_CR6_RESET_VALUE; /*< Set UART2_CR6 to reset value
0x00 */
}
void UART2_Init(u32 BaudRate, UART2_WordLength_TypeDef WordLength,
UART2_StopBits_TypeDef StopBits, UART2_Parity_TypeDef Parity,
UART2_SyncMode_TypeDef SyncMode, UART2_Mode_TypeDef Mode)
{
u8 BRR2_1, BRR2_2 = 0;
u32 BaudRate_Mantissa, BaudRate_Mantissa100 = 0;
/* assert_param: BaudRate value should be <= 625000 bps */
assert_param(IS_UART2_BAUDRATE_OK(BaudRate));
assert_param(IS_UART2_WORDLENGTH_OK(WordLength));
assert_param(IS_UART2_STOPBITS_OK(StopBits));
assert_param(IS_UART2_PARITY_OK(Parity));
/* assert_param: UART2_Mode value should exclude values such as
UART2_ModeTx_Enable|UART2_ModeTx_Disable */
assert_param(IS_UART2_MODE_OK((u8)Mode));
/* assert_param: UART2_SyncMode value should exclude values such as
UART2_CLOCK_ENABLE|UART2_CLOCK_DISABLE */
assert_param(IS_UART2_SYNCMODE_OK((u8)SyncMode));
UART2->CR1 &= (u8)(~UART2_CR1_M); /**< Clear the word length bit */
UART2->CR1 |= (u8)WordLength; /**< Set the word length bit according
to UART2_WordLength value */
UART2->CR3 &= (u8)(~UART2_CR3_STOP); /**< Clear the STOP bits */
UART2->CR3 |= (u8)StopBits; /**< Set the STOP bits number according
to UART2_StopBits value */
UART2->CR1 &= (u8)(~(UART2_CR1_PCEN | UART2_CR1_PS )); /**< Clear
the Parity Control bit */
UART2->CR1 |= (u8)Parity; /**< Set the Parity Control bit to
UART2_Parity value */
UART2->BRR1 &= (u8)(~UART2_BRR1_DIVM); /**< Clear the LSB mantissa
of UARTDIV */
UART2->BRR2 &= (u8)(~UART2_BRR2_DIVM); /**< Clear the MSB mantissa
of UARTDIV */
UART2->BRR2 &= (u8)(~UART2_BRR2_DIVF); /**< Clear the Fraction bits
of UARTDIV */
/**< Set the UART2 BaudRates in BRR1 and BRR2 registers according to
UART2_BaudRate value */
BaudRate_Mantissa = ((u32)CLK_GetClockFreq() / (BaudRate << 4));
BaudRate_Mantissa100 = (((u32)CLK_GetClockFreq() * 100) / (BaudRate
<< 4));
/**< The fraction and MSB mantissa should be loaded in one step in
the BRR2 register*/
BRR2_1 = (u8)((u8)(((BaudRate_Mantissa100 - (BaudRate_Mantissa *
100))
<< 4) / 100) & (u8)0x0F); /**< Set the fraction
of UARTDIV */
BRR2_2 = (u8)((BaudRate_Mantissa >> 4) & (u8)0xF0);
UART2->BRR2 = (u8)(BRR2_1 | BRR2_2);
UART2->BRR1 = (u8)BaudRate_Mantissa; /**< Set the LSB
mantissa of UARTDIV */
UART2->CR2 &= (u8)~(UART2_CR2_TEN | UART2_CR2_REN); /**< Disable the
Transmitter and Receiver before seting the LBCL, CPOL and CPHA bits */
UART2->CR3 &= (u8)~(UART2_CR3_CPOL | UART2_CR3_CPHA |
UART2_CR3_LBCL); /**< Clear the Clock Polarity, lock Phase, Last Bit
Clock pulse */
UART2->CR3 |= (u8)((u8)SyncMode & (u8)(UART2_CR3_CPOL |
UART2_CR3_CPHA | UART2_CR3_LBCL)); /**< Set the Clock Polarity, lock
Phase, Last Bit Clock pulse */
if ((u8)Mode & (u8)UART2_MODE_TX_ENABLE)
{
UART2->CR2 |= (u8)UART2_CR2_TEN; /**< Set the Transmitter Enable
bit */
}
else
{
UART2->CR2 &= (u8)(~UART2_CR2_TEN); /**< Clear the Transmitter
Disable bit */
}
if ((u8)Mode & (u8)UART2_MODE_RX_ENABLE)
{
UART2->CR2 |= (u8)UART2_CR2_REN; /**< Set the Receiver Enable
bit */
}
else
{
UART2->CR2 &= (u8)(~UART2_CR2_REN); /**< Clear the Receiver
Disable bit */
}
/**< Set the Clock Enable bit, lock Polarity, lock Phase and Last Bit
Clock pulse bits according to UART2_Mode value */
if ((u8)SyncMode&(u8)UART2_SYNCMODE_CLOCK_DISABLE)
{
UART2->CR3 &= (u8)(~UART2_CR3_CKEN); /**< Clear the Clock Enable
bit */
/**< configure in Push Pull or Open Drain mode the Tx I/O line by
setting the correct I/O Port register according the product package and
line configuration*/
}
else
{
UART2->CR3 |= (u8)((u8)SyncMode & UART2_CR3_CKEN);
}
}
void UART2_Cmd(FunctionalState NewState)
{
if (NewState != DISABLE)
{
UART2->CR1 &= (u8)(~UART2_CR1_UARTD); /**< UART2 Enable */
}
else
{
UART2->CR1 |= UART2_CR1_UARTD; /**< UART2 Disable (for low power
consumption) */
}
}
void UART2_ITConfig(UART2_IT_TypeDef UART2_IT, FunctionalState NewState)
{
u8 uartreg, itpos = 0x00;
assert_param(IS_UART2_CONFIG_IT_OK(UART2_IT));
assert_param(IS_FUNCTIONALSTATE_OK(NewState));
/* Get the UART2 register index */
uartreg = (u8)(UART2_IT >> 0x08);
/* Get the UART2 IT index */
itpos = (u8)((u8)1 << (u8)((u8)UART2_IT & (u8)0x0F));
if (NewState != DISABLE)
{
/**< Enable the Interrupt bits according to UART2_IT mask */
if (uartreg == 0x01)
{
UART2->CR1 |= itpos;
}
else if (uartreg == 0x02)
{
UART2->CR2 |= itpos;
}
else if (uartreg == 0x03)
{
UART2->CR4 |= itpos;
}
else
{
UART2->CR6 |= itpos;
}
}
else
{
/**< Disable the interrupt bits according to UART2_IT mask */
if (uartreg == 0x01)
{
UART2->CR1 &= (u8)(~itpos);
}
else if (uartreg == 0x02)
{
UART2->CR2 &= (u8)(~itpos);
}
else if (uartreg == 0x03)
{
UART2->CR4 &= (u8)(~itpos);
}
else
{
UART2->CR6 &= (u8)(~itpos);
}
}
}
u8 UART2_ReceiveData8(void)
{
return ((u8)UART2->DR);
}
void UART2_SendData8(u8 Data)
{
/* Transmit Data */
UART2->DR = Data;
}
FlagStatus UART2_GetFlagStatus(UART2_Flag_TypeDef UART2_FLAG)
{
FlagStatus status = RESET;
/* Check parameters */
assert_param(IS_UART2_FLAG_OK(UART2_FLAG));
/* Check the status of the specified UART2 flag*/
if (UART2_FLAG == UART2_FLAG_LBDF)
{
if ((UART2->CR4 & (u8)UART2_FLAG) != (u8)0x00)
{
/* UART2_FLAG is set*/
status = SET;
}
else
{
/* UART2_FLAG is reset*/
status = RESET;
}
}
else if (UART2_FLAG == UART2_FLAG_SBK)
{
if ((UART2->CR2 & (u8)UART2_FLAG) != (u8)0x00)
{
/* UART2_FLAG is set*/
status = SET;
}
else
{
/* UART2_FLAG is reset*/
status = RESET;
}
}
else if ((UART2_FLAG == UART2_FLAG_LHDF) || (UART2_FLAG ==
UART2_FLAG_LSF))
{
if ((UART2->CR6 & (u8)UART2_FLAG) != (u8)0x00)
{
/* UART2_FLAG is set*/
status = SET;
}
else
{
/* UART2_FLAG is reset*/
status = RESET;
}
}
else
{
if ((UART2->SR & (u8)UART2_FLAG) != (u8)0x00)
{
/* UART2_FLAG is set*/
status = SET;
}
else
{
/* UART2_FLAG is reset*/
status = RESET;
}
}
/* Return the UART2_FLAG status*/
return status;
}
void UART2_ClearFlag(UART2_Flag_TypeDef UART2_FLAG)
{
assert_param(IS_UART2_CLEAR_FLAG_OK(UART2_FLAG));
/*< Clear the Receive Register Not Empty flag */
if (UART2_FLAG == UART2_FLAG_RXNE)
{
UART2->SR = (u8)~(UART2_SR_RXNE);
}
/*< Clear the LIN Break Detection flag */
else if (UART2_FLAG == UART2_FLAG_LBDF)
{
UART2->CR4 &= (u8)(~UART2_CR4_LBDF);
}
/*< Clear the LIN Header Detection Flag */
else if (UART2_FLAG == UART2_FLAG_LHDF)
{
UART2->CR6 &= (u8)(~UART2_CR6_LHDF);
}
/*< Clear the LIN Synch Field flag */
else
{
UART2->CR6 &= (u8)(~UART2_CR6_LSF);
}
}
上一篇:第一頁
下一篇:最后一頁
推薦閱讀
史海拾趣
為了確保產品質量和客戶滿意度,AK-Nord_GmbH投入大量資源建設質量管理體系。公司引入了國際先進的質量管理標準和流程,對產品的研發、生產、測試等各個環節進行嚴格把控。同時,公司還建立了完善的客戶服務體系,及時響應客戶需求和處理問題。這些舉措有效提升了公司的產品質量和客戶滿意度,為公司贏得了良好的口碑。
隨著電子行業的快速發展,市場對CMOS圖像傳感器的需求日益增長。飛虹高科公司意識到,要想在市場中保持領先地位,必須不斷進行技術創新。因此,公司加大了研發投入,引進了一批高端研發設備,并與國內外知名高校和研究機構建立了緊密的合作關系。經過數年的努力,公司成功開發出了多款具有自主知識產權的CMOS圖像傳感器產品,其中一款產品以其高靈敏度、低功耗和低噪聲等優異性能,贏得了客戶的廣泛贊譽。
作為一家有社會責任感的企業,奇力新始終關注環境保護和可持續發展。公司積極推廣綠色生產技術和資源循環利用方案,減少生產過程中的能源消耗和廢棄物排放。同時,奇力新還積極參與社會公益活動,為社區和環境貢獻自己的力量。這些舉措不僅體現了奇力新的社會責任擔當,也為其贏得了更多客戶和合作伙伴的信任和支持。
ACP Optoelectronic Technology Co Ltd始終堅持創新驅動的發展理念。公司不斷投入研發資金,引進先進設備和技術人才,推動產品升級換代。隨著市場的不斷變化和客戶需求的不斷提升,ACP Optoelectronic Technology Co Ltd的產品線不斷豐富和完善,產品質量和性能也得到了顯著提升。
Baneasa SA公司成立之初,便專注于電子元器件的研發與生產。公司憑借創始團隊的技術積累和市場洞察力,成功開發出一款高性能的半導體芯片,迅速在行業內嶄露頭角。這款芯片以其出色的穩定性和可靠性贏得了市場的廣泛認可,為Baneasa SA的發展奠定了堅實的基礎。
Baneasa SA公司成立之初,便專注于電子元器件的研發與生產。公司憑借創始團隊的技術積累和市場洞察力,成功開發出一款高性能的半導體芯片,迅速在行業內嶄露頭角。這款芯片以其出色的穩定性和可靠性贏得了市場的廣泛認可,為Baneasa SA的發展奠定了堅實的基礎。
不知道有人用過PLC沒有,這是我們開發的一個梯形圖邏輯到C語言的轉換器,對于一些純粹的位邏輯控制算法,可能有些幫助。同時,網站上也有一些PLC的使用教程和開發資料,希望對大家有用。 項目介紹[http://www.visiblecontrol.com/product ...… 查看全部問答∨ |
|
單片機的內部、外部結構(一) 一、單片機的外部結構 拿到一塊芯片,想要使用它,首先必須要知道怎樣連線,我們用的一塊稱之為89C51的芯片,下面我們就看一下如何給它連線。 1、 電源:這當然是必不可少的了。單片機使用的是5V電源,其中正極接40引 ...… 查看全部問答∨ |
|
請教AddDevice函數是做什么用的呀?為什么文件系統過濾驅動AddDevice函數? 向高手請教 請教AddDevice函數是做什么用的呀?為什么文件系統過濾驅動AddDevice函數?… 查看全部問答∨ |
|
由于缺乏高端SoC芯片技術,國內IC設計企業在嵌入式CPU開發上一直處于落后狀態。可喜的是,隨著全球半導體產業的技術轉移及自身的努力,近年來國內已涌現出一些嵌入式CPU開發優勢企業。下面就由福州卓躍教育具 ...… 查看全部問答∨ |
我在使用CYSteam例程來測速速度的時候一直出現了一個問題,下載固件程序后,在設備管理器中能夠看到該驅動已經正常安裝了,但是在console或者是官方提供的CYSteam中無法識別。一直以為是驅動的程序的問題。但是我利用購買的開發板就沒有這個問題。 ...… 查看全部問答∨ |