STM32F0的USART通訊的例子
前言:
正文:
所有USART設(shè)置都設(shè)置了
1,時(shí)鐘,enable
2,IO配置,AF,PP,
3,在while里循環(huán)發(fā)送0x55
我在示波器里頭看到了初始都是高電平,然后一低一高一低一高,重復(fù)10次,后來孔工給我看手冊(cè),告訴我說,串口通信是有個(gè)起始位是低,有個(gè)終值位是高,中間是8個(gè)位,如果1就是高,0,就是低,我一看,0x55不是0101 0101嗎,后來知道串口通信是低位開始發(fā),所以是10101010,這10位,說的通了
如果示波器都顯示出101010時(shí),說明發(fā)送是成功的,唯一的錯(cuò)誤就要找,TXD是不是和RXD接反了
問題2,使用中斷去處理接收的RXD信號(hào)時(shí),失敗,一直蜂鳴器長(zhǎng)響,主要設(shè)置原因:
IO口設(shè)置,
1,AF推挽,2,PP,3,UP,關(guān)鍵是3,不能是nopull,一定要是UP,所以以后都是UP
// 中斷設(shè)置
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// 接收中斷
USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除接收中斷標(biāo)志
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); //接收中斷使能
void USART2_IRQHandler(void){
if( USART_GetITStatus( USART2, USART_IT_RXNE ) == SET )
{
LCD_Clear(RED);
LCD_Clear(WHITE);
USART_ReceiveData(USART2);
USART_ClearITPendingBit(USART2,USART_IT_RXNE);// 清除中斷標(biāo)志
}
}