Đề và đáp án kiểm tra thường xuyên 2 Vi điều khiển HaUI Code và lưu đồ cho Ngắt ngoài, Timer, ADC, PWM và UART trong vi điều khiển STM32 F103C8
Trang 1Câu 1:
a Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: 01 vi điều khiển STM 32, các điện trở, 04 LED 7 thanh ; 01 nút nhấn
thường mở (BT1)
b Lập lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- Sử dụng ngắt ngoài, đếm số lần nhấn BT1
- Hiển thị số lần nhấn BT1 trên 04 LED 7 thanh (sử dụng phương pháp quét LED)
Giả thiết số lần nhấn không quá 1999 lần
Ghi chú:
- Nếu chương trình có không quá 2 lỗi cú pháp và project được tạo đúng: GV sửa lỗi và chấm điểm các phần 4,5,6 đồng thời
trừ 1 điểm/lỗi
- Nếu chương trình có 3 lỗi trở lên hoặc tạo sai project: Điểm của phần 3,4,5,6 bằng 0.
Begin
Khời tạo: dem=0, maled, ngắt
PB0-PB11: ra BT1-PA1: vào
Dem<
=1999
9
Đ
Hiển thị số lần nhấn BT1 trên 4 LED 7 thanh
Begin
Dem++
End
Trang 2Câu 1:
a Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: 01 vi điều khiển STM 32, các điện trở; 03 nút nhấn thường mở (BT1)
- Công cụ truyền thông nối tiếp Virtual Terminal
b Lập lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- Mô phỏng bãi đỗ xe, cảm biến vào kết nối với nút nhấn BT1, cảm biến ra kết nối với nút nhấn
BT2, nút RESET về giá trị ban đầu kết nối BT3 (yêu cầu viết được chương trình đọc nút nhấn)
- Hiển thị lên Virtual Terminal với tốc độ Baud 9600bps: số xe vào, số xe ra, số xe có trong bãi Giả thiết số bãi xe chứa được tối đa 1000 xe
Begin
Khởi tạo: vào/ ra Thiết lập UART: Chế độ Asynchronous
Baud rate: 9600 Khai báo bien dem,dem1,dem2=0;
Uint32_t hienthi[100];
Khởi tạo UART HAL_UART_Start
Dem<=1000
Đ BT1 nhấn
Dem1++
BT2 nhấn
Dem2++
Truyền và hiển thị lên màn hình: số xe ra/vào, còn Sprinf();
HAL_UART_Transmit();
Trang 3Câu 1:
a Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: 01 vi điều khiển STM 32, các điện trở, 04 LED 7 thanh ; 01 nút nhấn thường mở (BT1)
b Lập lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- Sử dụng Timer 1 chế độ đếm, đếm số lần nhấn BT1-TI1FP1 (yêu cầu viết được chương trình đọc nút nhấn sử dụng chế độ đếm của Timer)
- Hiển thị số lần nhấn BT1 trên 04 LED 7 thanh(sử dụng phương pháp quét LED)
Giả thiết số lần nhấn không quá 1234 lần
Begin
Khởi tạo vào/ra Thiết lập Timer1:
Prescaler: 0; Period: 1234 Khai báo biến dem;
Khởi tạo Timer1 HAL_TIM_Base_Start(&htim1);
Gán giá trị trả về của Timer vào biến dem Dem= HAL_TIM_GET_COUNTER(&htim1);
Hiển thị số lần nhấn BT1 lên 4 led 7 thanh
Trang 4Câu 1:
a Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: 01 vi điều khiển STM 32; 01 nút nhấn thường mở (BT1)
- Công cụ máy hiện sóng Oscilloscope hoặc công cụ đo tần số Counter Timer
b Lập lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- Sử dụng Timer 2 để tạo xung
- Khi nhấn nút BT1 lần thứ 01 xung trên chân PB0 có tần số 5KHz; khi nhấn nút BT1 lần thứ 02 xung trên chân PB0 có tần số 1KHz
- Khi nhấn nút BT1 lần thứ 03 xung trên chân PB0 có tần số 10KHz; khi nhấn nút BT1 lần thứ 04 quay lại lần nhấn thứ 01
Giả thiết bộ tạo dao động chế độ HSI với tấn số 8MHz
Begin
Khởi tạo: BT1: vào, PB0: ra, dem=0
Thiết lập Timer 2: Cho phép ngắt
Prescaler: 0, Period: 799
Khởi tạo Timer2 HAL_TIM_Base_Start_IT
BT1 nhấn?
Dem++;
Dem==?
Thay đổi giá trị Timer theo biến dem HAL_TIM_SetAutoreload
Đ
S
Begin
Đảo mức logic trên chân PB0
End
Trang 5Câu 1:
a Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: 01 vi điều khiển STM 32, các điện trở, 01 biến trở; 04 Led 7 thanh,
01 Led đơn
b Lập lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- Đọc giá trị ADC1-IN1 trên chân PA1, hiển thị giá trị ADC đo được dưới dạng volt (ví dụ 1.345) trên 04 LED 7 thanh (sử dụng phương pháp quét LED)
- LED1 sáng khi điện áp trên IN1 nằm trong khoảng từ 1V đến 2V, tắt khi điện áp trên IN2 nằm ngoài khoảng từ 1V đến 2V
Begin
Khởi tạo vào/ra Thiết lập ADC1-IN1/PA1:
Bật chế độ: Continuous Conversion Mode và Right Alignment
Khai báo biến adc,x,volt
Khởi tạo ADC HAL_ADC_Start(&hadc1);
Chờ ADC chuyển đổi HAL_ADC_PollForConversion(&hadc1,10);
Gán giá trị của ADC vào biến adc adc=HAL_ADC_GET_VALUE ();
Chuyển kết quả sang volt volt=(float)adc/4095*3.3 x=volt*1000;
Hiển thị giá trị của ADC đo được dạng volt lên 4 led 7 thanh
1<=volt<=2?
S
LED1 tắt
Đ LED1 sáng
Trang 6Câu 1:
a Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: 01 vi điều khiển STM 32, các điện trở, 02 LED 7 thanh ; 01 nút nhấn thường mở (BT1)
- Công cụ máy hiện sóng Oscilloscope hoặc công cụ đo tần số Counter Timer
b Lập lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- Sử dụng Timer 3 tạo xung PWM có tần số 4 KHz trên kênh CH1.Yêu cầu độ rông xung Ton: Sau khi cấp nguồn Ton=10%Tpwm; Khi nhấn nút BT1 lần thứ 01 Ton=20%Tpwm
- Khi nhấn nút BT1 lần thứ 02 Ton=60%Tpwm; khi nhấn nút BT1 lần thứ 03 Ton=90%Tpwm; khi nhấn nút BT1 lần thứ 04 quay lại lần nhấn thứ 01
Giả thiết bộ tạo dao động chế độ HSI với tấn số 8MHz
Begin
Khời tạo vào/ra: BT1: vào Khai báo biến dem=0;
Thiết lập Timer 3: Chế độ xung nội Prescaler: 0, Period: 1999 PWM kênh 1, Pulse: 200
BT1 nhấn?
Dem++;
Dem%3==1
Thay đổi Pulse Ton=20%Tpwm (Setcompare)
Dem%3==2
Thay đổi Pulse Ton=60%Tpwm (Setcompare)
Dem%3==0
Thay đổi Pulse Ton=90%Tpwm (Setcompare)
Đ
Đ
Đ
Trang 707 Câu 1:
a Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: 01 vi điều khiển STM 32, các điện trở; 01 nút nhấn thường mở (BT1)
- Công cụ truyền thông nối tiếp Virtual Terminal
b Lập lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- Khi nhấn BT1 lần thứ 01 truyền lên Virtual Terminal “ Họ và tên”; khi nhấn BT1 lần thứ 02 truyền lên Virtual Terminal “ Mã sinh viên”
- Khi nhấn BT1 lần thứ 03 xóa toàn bộ màn hình; khi nhấn BT1 lần thứ 04 lặp lại lần nhấn thứ 01 Với tốc độ Baud 19200bps Giả thiết số lần nhấn không quá 2255 lần
Begin
Khởi tạo vào/ra: BT1: vào PA9-PA10: Chiều ra dữ liệu UART;
Cấu hình UART1: Chế độ Asynchronous, Baud rate: 19200bps
Khai báo mảng truyền, nhận: n, m…
Khai báo biến dem=0;
Khởi tạo ADC HAL_UART_Start(&huart1);
Dem<=2255
Dem++;
Đ BT1 nhấn?
S
Đ
Truyền dữ liệu qua UART theo giá trị của biến dem
HAL_UART_Transmit ();
Trang 8Câu 1:
a Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: 01 vi điều khiển STM 32, các điện trở, 04 LED 7 thanh ; 01 nút nhấn thường mở (BT1)
b Lập lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- Sử dụng Timer 3 chế độ đếm, đếm số lần nhấn BT1-TI1FP1 (yêu cầu viết được chương trình đọc nút nhấn sử dụng chế độ đếm của Timer)
- Hiển thị số lần nhấn BT1 trên 4 LED 7 thanh (bằng phương pháp quét Led)
Giả thiết số lần nhấn không quá 1220 lần
BEGIN
Khời tạo vào/ra: 4 LED: ra, BT1: vào
Khai báo biến dem=0;
Thiết lập Timer 3 chế độ đếm TI1FP1
Khai báo mảng ma_led
Khởi tạo Timer 3 HAL_TIM_Base_Start ();
Gán giá trị trả về của Timer 3 vào biến dem Dem= HAL_TIM_GET_VALUE ();
Hiển thị số lần nhấn lên 4 LED 7 thanh
Trang 9Câu 1:
a Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: 01 vi điều khiển STM 32; 01 nút nhấn thường mở (BT1)
- Công cụ máy hiện sóng Oscilloscope hoặc công cụ đo tần số Counter Timer
b Lập lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- Sử dụng Timer 1 để tạo xung trên chân PA1 có tần số 10KHz; sau 2 giây có tần số 4KHz; sau 2 giây có tần số 1KHz
- Sử dụng Timer 3 để tạo xung trên chân PA2 có tần số 5KHz sau 2 giây có tần số 2KHz; sau 2 giây có tần số 500Hz
Giả thiết bộ tạo dao động chế độ HSI với tấn số 8MHz
Begin
Khởi tạo vào/ra: PA1: ra
Thiết lập ngắt Timer1: Chế độ xung nội
Prescaler=0, Period=399;
Thiết lập ngắt Timer3: Chế độ xung nội
Prescaler=0, Period=799;
Khởi tạo Timer1, Timer3
HAL_TIM_Base_Start_IT ();
Sau 2 giây, tần số thay đổi
HAL_TIM_SetAutoreload ();
HAL_TIM_SET_PRESCALER ();
Begin
Đảo mức logic trên chân PA1 Đảo mức logic trên chân PA2
END
Trang 10Câu 1:
a Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: 01 vi điều khiển STM 32, các điện trở, 01 biến trở; 4 Led 7 thanh
b Lập lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- Đọc giá trị ADC1-IN3 trên chân PA3, hiển thị giá trị ADC đo được dưới dạng volt (ví dụ 1.345) trên 04 LED 7 thanh (sử dụng phương pháp quét LED)
- LED13 sáng khi điện áp trên IN3 nằm trong khoảng từ 2V đến 3V, tắt khi điện áp trên IN3 nằm ngoài khoảng từ 2V đến 3V
Begin
Khởi tạo vào/ra: 4 LED: ra Thiết lập ADC1-IN3/PA3: Bật chế độ
Continuous Conversion Mode, Right
Alignment Khai báo biến adc, x, float=0;
Khai báo mảng ma_led
Khởi tạo ADC HAL_Adc_start ();
Chờ ADC chuyển đổi xong HAL_ADC_PollForConversion ();
Gán giá trị của ADC vào biến adc adc=HAL_ADC_GET_VALUE ();
Chuyển kết quả sang volt volt=(float)adc/4095*3.3 x=volt*1000;
Hiển thị giá trị đo được lên 4 led 7 thanh
2482<=adc<=3723
LED13 sáng
Đ
S
LED13 tắt
Trang 11Câu 1:
a Thiết kế mạch điện như sau:
- Các linh kiện được sử dụng: 01 vi điều khiển STM 32, các điện trở, 02 LED 7 thanh ; 01 nút nhấn thường mở (BT1)
- Công cụ máy hiện sóng Oscilloscope hoặc công cụ đo tần số Counter Timer
b Lập lưu đồ thuật toán và viết chương trình theo yêu cầu như sau:
- Sử dụng Timer 1 tạo xung PWM trên 2 kênh CH1 và CH2 có tần số 5 KHz , khi không nhấn BT1
độ rộng xung Ton1=10%Tpwm, Ton2=60%Tpwm;
- Khi nhấn BT1 sau 2s Ton1=90%Tpwm, Ton2=40%Tpwm
Giả thiết bộ tạo dao động chế độ HSI với tấn số 8MHz
CTC
Begin
Khởi tạo vào/ra: PA0: vào
PA8, PA9: ra
Thiết lâp Timer 1