Проблема: При передачи 8-ми битного пакета, флаг TC никак не реагирует. Перерыл даташит, пересмотрел кучу примеров на разных языках. Вот мой код инициализации в Keil.
Код: Выделить всё
1 get stm32f10x.asm ;Заголовочный файл.
2 AREA |.text|,CODE,READONLY ;В памяти кода.
3 Reset_Handler
4 fck equ 24000000 ;Частота USART.
5 baudrate equ 9600 ;Скорость передачи.
6 mov R10,#0 ;Константы.
7 mov R11,#1
8 ;---------- UART1.----------
13 ;Разрешаем тактирование порта A и USART.----------
14 ldr R0, =RCC_APB2ENR
15 ldr R1, =RCC_APB2ENR_IOPAEN|RCC_APB2ENR_USART1EN|RCC_APB2ENR_AFIOEN
16 str R1, [R0]
17 ;PA9 выход push-pull в альтернативном режиме. Частота 50 МГц. PA10 вход без подтяжки.----------
18 ldr R0, =GPIOA_CRH
19 ldr R1, =GPIO_CRH_MODE9|GPIO_CRH_CNF9_1|GPIO_CRH_CNF10_0
20 str R1, [R0]
21 ;Настройка скорости USART.
22 ldr R0, =USART1_BRR ;11:0 - целая, 3:0 - дробная.
23 ldr R1, =0x341 ;Формула рассчета.
24 str R1, [R0]
25 ;UE - включить USART; TE - вкл. передатчик; RE - вкл. приемник.
26 ldr R0, =USART1_CR1
27 ldr R1, =USART_CR1_UE|USART_CR1_TE|USART_CR1_RE
28 str R1, [R0]
29
30 ;Отправляем байт по USART
31 K ldr R0, =USART1_DR
32 mov R1,#'F'
33 str R1, [R0]
34
35 ;Считываем бит TC (6). Ждем 0-------------------------------------------
36 SR ldr R0, =(USART1_SR&0x00FFFFFF)*0x20+0x42000000+6*4
37 ldr R1, [R0]
38 cmp R1, R10
39 bne SR
40 b K
41 END
Цикл становиться бесконечным. Если вручную сбросить бит, то отправится следующий пакет, TC = 1, и снова бесконечный цикл ожидания.







