1:STM32中国のデータシートを読んだ後、私は把握するのに長い原理は非常に単純であるとしてとしてシリアルポートを使用し、時間51を学ぶことも接触を持って、我々はUSARTシリアル通信のいくつかを理解していると信じて
データ送受信処理が直感的に、図から分かります。
USARTシリアル通信は、いくつかの重要なレジスタを含み、
ステータスレジスタ1 :)
2)データレジスタ
3)ボーレートレジスタ
例:には、9600のビットレートを設定し、DIVは468.75であり、次に高い値に維持されるレジスタ12:468は、下位4ビットに格納されている値:16 = 0.75 * 12(十進、16進小数に変換しました) ;最後に、整数及び小数スプライス:BRR = 468 << 4 + 12は、(詳細なプロセスは、ソースコードを参照することができます。)
4)制御レジスタ1:
5)コントロールレジスタ2:
主にストップビット、クロックの極性、クロックイネーブル
6)コントロールレジスタ3:
これは、ハードウェアフロー制御、DMA設定などに関する
データを送信します:
データの受信:
関連プログラム:
割り込み機能:
空USART1_IRQHandler(無効)
{
静的U8のCH;
USART_ClearFlag(USART1、USART_FLAG_TC)。
(USART_GetITStatus(USART1、USART_IT_RXNE)!= Bit_RESET)の場合
{
CH = USART_ReceiveData(USART1)。
一方、(USART_GetFlagStatus(USART1、USART_FLAG_TXE)== Bit_RESET)。USART_SendData(USART1、CH)。
(USART_GetFlagStatus(USART1、USART_FLAG_TC))、一方、
}
}
メインプログラム:
メインint型()
{
usart_init();
(1)一方、
}
設定プログラム:
空usart_init()
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
USART_DeInit(USART1);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl =
USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
USART_ITConfig (USART1,USART_IT_RXNE,ENABLE);
USART_ClearFlag(USART1,USART_FLAG_TC);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}