STM32筆記 串列埠傳送寬度為9位的資料

2021-10-05 04:27:13 字數 1752 閱讀 8251

最近為了配置乙個晶元使用到了串列埠傳送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,由於...