ใช่ uart ตัวไหนครับไม่ได้บอกอะไรเลย
USART1 ====> Bus Clock = 72Mhz อยากได้ 600 ต้องตั้งตัวหาร = 120000
UART2 =====>Bus Clock = 36Mhz อยากได้ 600 ต้องตั้งตัวหาร = 60000
UART3 =====>Bus Clock = 36Mhz อยากได้ 600 ต้องตั้งตัวหาร = 60000
UART4 =====>Bus Clock = 36Mhz อยากได้ 600 ต้องตั้งตัวหาร = 60000
------------------------------------------------------------------------------
USARTX->BRR = Bus clock/ค่าความเร็วที่ต้องการถ่ายถอด
ตัวหาร USART_BBR register ของ STM32F10t ใช้งานได้แค่ 16 บิทนะครับ ไม่ใช่ 32 บิท จึงไม่สามารถใส่ค่า 120000 ได้
16 bit ค่า สูงสุดได้แค่ 0xFFFF ครับ แต่ตัวอย่างมัน 120000 ซึ่งเกินค่า ถูกต้องครับ
แต่ถ้าต้องการเซ็ทค่าความถี่ที่ 72000000 hz หรือ 72Mhz ตามตัวอย่าง ต้องใช้ ปรีสเกลมาช่วยครับ
ใช้ PCLK 2 = APB2(/2) จะได้เท่ากับ 36Mhz มีผลกระทบกับโมดูลที่ใช้ สัญญาณจาก PCLK2 เท่านั้น
นอกนั้น เป็นปกติ PCLK1 ก็ยังเท่าเดิม ความถี่ก็ยังเท่าเดิม ที่แหล่งกำเนิด PLL9 Fs = 72Mhz
สิ่งที่ควรปฏิบัติ ตามข้อมูลคือ ที่xtal 8Mhz ค่าความถี่สูงสุดคือ 72 Mhz
ค่าPCLK1 สูงสุดคือ 36 Mhz ดังนั้น APB1 จะต้องหาร 2
ค่าPCLK2 สูงสุดคือ 72 Mhz ดังนั้นAPB2 จะต้องหารน้อยที่สุดได้คือ หาร1
แต่ว่าต้องแยกระหว่า Fs, PCLK1 ,PCLK2 จากกัน ความถี่ใครความถี่มัน
Fs เป้นตัวกระจายความถี่ไปตามโมดูลต่างๆ
ถ้าต้องการ Fs ที่ 72Mhz ก็ต้องหารที่ PCLK2 ให้เหลือ 36 Mhz USART1 จะใช้ความถี่นี้ ที่PCLK2
USARTX->BRR = 36000000/6000 = 0xEA60 = 60000
UART2,UART3,UART4,UART5 ใช้ความถี่จาก PCLK1 อยู่แล้วเลยได้อนิสง ที่ความถี่36Mhz อยู่แล้ว มันถูกหารโดยเงื่อนไขกำหนด
จากผู้ผลิตที่กำหนดไว้ เลยสามารถทำให้ทำงานได้เลย