最近為了配置乙個晶元使用到了串列埠傳送9位資料位的情況,在此小記一下。
將資料位寬度配置成:uart_wordlength_9b
,其他引數和常規配置一樣。
uart_handletypedef husart3;
void
hal_uart_mspinit
(uart_handletypedef* huart)
}void
mx_usart3_init
(void
)
看了下庫函式,如果想要收發資料位寬度為9位的資料,貌似只能夠通過阻塞模式傳送,如下是阻塞模式下串列埠傳送資料的庫函式(省略部分函式,只留取了最關鍵的**):
/**
* @brief sends an amount of data in blocking mode.
* @param huart: pointer to a uart_handletypedef structure that contains
* the configuration information for the specified uart module.
* @param pdata: pointer to data buffer
* @param size: amount of data to be sent
* @param timeout: timeout duration
* @retval hal status
*/hal_statustypedef hal_uart_transmit
(uart_handletypedef *huart, uint8_t *pdata, uint16_t size, uint32_t timeout)..
.省略}
然鵝我發現這個庫函式傳送資料寬度為9位的資料時第九位只能是0,如果第九位想發1的話那就不需要這麼配置了,直接用停止位當第九位就可以,這樣的話是可以實現,只是比較麻煩,要麼使用中斷方式傳送,要麼將串列埠資料位寬度再重新配置成8位,所以我把這個函式改了一下,多加了乙個第九位位選擇的引數。
程式如下:
/**
* @brief sends an amount of data in blocking mode.
* @param huart: pointer to a uart_handletypedef structure that contains
* the configuration information for the specified uart module.
* @param pdata: pointer to data buffer
* @param size: amount of data to be sent
* @param bit_9 : bit 9 state
* @param timeout: timeout duration
* @retval hal status
*/hal_statustypedef hal_uart_transmit_9b
(uart_handletypedef *huart, uint8_t *pdata, uint16_t size, uint8_t bit_9, uint32_t timeout)
else..
.省略 }..
.省略}
STM32筆記之USART串列埠通訊
第五章 usart串列埠通訊 總結 開始!開始!微控制器的usart串列埠除錯。一 usart rx 接收 tx 傳送 如下 示例 include usart.h 中斷優先順序的配置,包含在mise.h標頭檔案中 static void nvic cinfig void usart配置 void u...
STM32筆記記錄
串列埠記錄 stm32有好幾個串列埠。比如說stm32f103zet6有5個串列埠,串列埠1的引腳對應的io為pa9,pa10.pa9,pa10預設功能是gpio,所以當pa9,pa10引腳作為串列埠1的tx,rx引腳使用的時候,那就是埠復用。復用埠初始化有幾個步驟 1 gpio埠時鐘使能。要使用到...
STM32筆記 ADC DMA方式
adc流程,首先adc採集乙個訊號 訊號範圍大都為0 3.3v,ps 3.3v可通過更改vref暫存器修改 每隔相同時間菜一次數值傳送到乙個可變16位數中,下面是我們的陣列定義 io uint16 t adc convertedvalue 定義該16位數用來傳輸資料,原因是我們使用的12位ad,由於...